123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: 流年 <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- // 应用公共文件
- /*微信小程序用
- * 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));
- }
- }
|