php好用的方法
<?php namespace app\common\library; //非标准的base64类 class Base64 { private static $hashTable = 'aD1cOrFAx3HXejRYwG4o9*SPW5ZibBt6Csd2Q/Ek7Vu0NJ8ymThvKpULfMIgqlnz'; //$base64hash = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';////标准base64算法 /** * 编码 * @param string $s 需要加密的字符串 * @return string */ public function encode($s) { $base64hash = self::$hashTable; $i = 0; $prev = 0; $result = []; while ($i < strlen($s)) { $ascii = ord($s[$i]); $mod = $i % 3; switch ($mod) { case 0: // 第一个6位只需要让8位二进制右移两位 $result[] = $base64hash[$ascii >> 2]; break; case 1://第二个6位 = 第一个8位的后两位 + 第二个8位的前4位 $result[] = $base64hash[($prev & 3) << 4 | ($ascii >> 4)]; break; case 2: //第三个6位 = 第二个8位的后4位 + 第三个8位的前2位 , 第4个6位 = 第三个8位的后6位 $result[] = $base64hash[($prev & 0x0f) << 2 | ($ascii >> 6)]; $result[] = $base64hash[$ascii & 0x3f]; break; } $prev = $ascii; $i++; } // 循环结束后看mod, 为0 证明需补3个6位,第一个为最后一个8位的最后两位后面补4个0。另外两个6位对应的是异常的“=”; // mod为1,证明还需补两个6位,一个是最后一个8位的后4位补两个0,另一个对应异常的“=” if ($mod == 0) { $result[] = $base64hash[($prev & 3) << 4]; $result[] = '=='; } else if ($mod == 1) { $result[] = $base64hash[($prev & 0x0f) << 2]; $result[] = '='; } return implode('', $result); } /** * 解码 * @param string $s 需要解密的字符串 * @return string */ public function decode($s) { $s = preg_replace("/\s|=/", '', $s); $base64hash = self::$hashTable; $i = 0; $prev = 0; $result = []; while ($i < strlen($s)) { $cur = strpos($base64hash, $s[$i]); $mod = $i % 4; switch ($mod) { case 0://TODO break; case 1: $result[] = chr($prev << 2 | $cur >> 4); break; case 2: $result[] = chr(($prev & 0x0f) << 4 | $cur >> 2); break; case 3: $result[] = chr(($prev & 3) << 6 | $cur); break; } $prev = $cur; $i++; } return implode('', $result); } }
//计算2个坐标直接的距离
/* * 获取2个坐标直接的距离 * */ function get_distance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6367000; //地球半径m $lat1 = ($lat1 * pi() ) / 180; $lng1 = ($lng1 * pi() ) / 180; $lat2 = ($lat2 * pi() ) / 180; $lng2 = ($lng2 * pi() ) / 180; $calcLongitude = $lng2 - $lng1; $calcLatitude = $lat2 - $lat1; $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); $stepTwo = 2 * asin(min(1, sqrt($stepOne))); $calculatedDistance = $earthRadius * $stepTwo; return round($calculatedDistance); }

浙公网安备 33010602011771号