// +---------------------------------------------------------------------- // 应用公共文件 /*微信小程序用 * code 成功 * 20210927 * wj */ function backjson($code, $data) { $jsonData = [ 'code' => $code, 'resultData' => $data, ]; return json_encode($jsonData, 320); } /*app用 * 20210927 * wj */ function backjson2($code, $msg = "", $data = []) { $jsonData = [ 'code' => $code, 'msg' => $msg, 'data' => $data, ]; return json_encode($jsonData, 320); } /* 内部使用 * 20210927 * wj */ function backarr($status, $msg = "", $data = []) { $backData = [ 'status' => $status, 'msg' => $msg, 'data' => $data, ]; return $backData; } /*** * 获取单号 * wj * 20210911 */ function createOrderNo($key = null) { //$ordrNo = date("YmdHis") . $key . rand(0, 1000); //$ordrNo = date("YmdHis") . $key; if (!empty($key)) { $ordrNo = date("YmdHis") . uniqid() . $key; } else { $ordrNo = date("YmdHis") . uniqid(); } return $ordrNo; } /*** * 获取随机字符串 * wj * 20210911 */ function getRandomStrings($str = "") { $str .= time(); return md5($str); } /*** * 判断是否为日期 * wj * 20211013 */ function isDate($date, $foramt) { $date1 = $date; $time = strtotime($date1); if (!$time) { return false; } $date2 = date($foramt, $time); return $date1 == $date2; } //curl请求 function requestCurl($url, $method = "get", $data = '', $header = [], $second = 10) { $method = strtoupper($method); $method = in_array($method, ['GET', 'POST']) ? $method : 'GET'; $ch = curl_init(); //设置超时 curl_setopt($ch, CURLOPT_TIMEOUT, $second); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //严格校验2 //设置header curl_setopt($ch, CURLOPT_HEADER, false); if (!empty($header)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if ('POST' == $method) { //$data = json_encode($data, JSON_UNESCAPED_UNICODE); curl_setopt($ch, CURLOPT_POST, true); if (is_array($data)) { curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data, '')); } if (is_string($data)) { curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Post提交的数据包 } } curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //禁止 cURL 验证对等证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //是否检测服务器的域名与证书上的是否一致 //运行curl $data = curl_exec($ch); if (curl_errno($ch)) { //出错则显示错误信息 $error = curl_error($ch); curl_close($ch); return $error; } else { curl_close($ch); return $data; } } function arry_string($data) { if (!is_array($data)) { return false; } $usedata = []; foreach ($data as $key => $value) { if (!is_string($value) && !is_numeric($value)) { return false; } $usedata[] = $key . '=' . $value; } $str = implode('&', $usedata); return $str; } //根据身份证获取性别 function getGenderBySfzid($sfzid) { $gender = false; switch (mb_strlen($sfzid)) { case 15: $genderNum = substr($sfzid, 14, 1); break; case 18: $genderNum = substr($sfzid, 16, 1); break; } if (($genderNum % 2) === 0) { $gender = "女"; } else { $gender = "男"; } return $gender; } function getGenderByAge($sfzid) { $birthday = substr($sfzid, 6, 8); $bmd = substr($birthday, 4, 4); $byear = substr($birthday, 0, 4); $strtoday = date('Ymd'); $md = substr($strtoday, 4, 4); $year = substr($strtoday, 0, 4); $age = intval($year) - intval($byear); if ($md < $bmd) { $age = $age - 1; } return $age; } //获取身份证结束时间 function getSfzend($sfzenddate) { if (is_numeric($sfzenddate)) { if (isDate($sfzenddate, "Ymd")) { $strenddate = $sfzenddate; $strendmonth = substr($strenddate, 4, 2); $strendyear = substr($strenddate, 0, 4); $strendday = substr($strenddate, 6, 2); $sfzenddate = $strendyear . '-' . $strendmonth . '-' . $strendday; } else { $sfzenddate = '2050-12-31'; } } else { $sfzenddate = false; } return $sfzenddate; } //为cp后台请求验证token /*function checkToken() { $l_w = new app\index\logic\webmanger(); $token = request()->server('HTTP_TOKEN'); $param = ['token' => $token]; $result = $l_w->queryinfobytoken($param); if (1 != $result['status']) { $str = backjson2(0, '登录失效', $result['data']); exit($str); } }*/ //判断是否是手机号 function isMoblid($tel) { if (preg_match("/^1[3-9]{1}\d{9}$/", $tel)) { return true; } else { return false; } } //获取httpsurl function getselfurl($name = null) { $env = config('env'); $sellurl = config('selfurl'); $urllist = isset($sellurl[$env]) ? $sellurl[$env] : $sellurl['pro']; $defaultname = "default"; if (empty($name)) { $name = $defaultname; } return isset($urllist[$name]) ? $urllist[$name] : $urllist[$defaultname]; } /** * 随机验证码 * * @param integer $type * @param integer $len * @return void * @author wj * @date 2022-07-25 */ function randomStr($type = 1, $len = 6) { $number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; $strArray = []; switch ($type) { case 1: $strArray = $number; break; } $len = $len <= 0 ? 6 : $len; $len = $len > 10 ? 6 : $len; $str = ''; for ($i = 0; $i < $len; $i++) { $num = $strArray[mt_rand(0, count($strArray) - 1)]; $str .= $num; } return $str; } /** * 数据加密和解密 默认加密 */ function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $defaultkey = "acidhospital"; // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $defaultkey); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya . md5($keya . $keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for ($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for ($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } // 核心加解密部分 for ($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; // 从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if ($operation == 'DECODE') { // 验证数据有效性,请看未加密明文的格式 if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc . str_replace('=', '', base64_encode($result)); } }