1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: zhangjianfeng
    5. * Date: 2018/11/23
    6. * Time: 11:26:13
    7. */
    8. date_default_timezone_set('asia/shanghai');
    9. define('C',[
    10. 'dbhost'=>'120.78.91.214',
    11. 'dbuname'=>'root',
    12. 'dbpwd'=>'323846mysql',
    13. 'dbname'=>'gmctest',
    14. 'dbport'=>'3306',
    15. 'wsip'=>'0.0.0.0',
    16. 'wsport'=>'2000',
    17. 'wsport2'=>'2002',
    18. 'redisport'=>'6379',
    19. 'redisip'=>'127.0.0.1',
    20. ]);
    21. //define('C',[
    22. // 'dbhost'=>'rm-j6c2sp878udjj5v1w.mysql.rds.aliyuncs.com',
    23. // 'dbuname'=>'bs_trade_userzjf',
    24. // 'dbpwd'=>'O9#d22Wex220X',
    25. // 'dbname'=>'gmdb',
    26. // 'dbport'=>'3306',
    27. // 'wsip'=>'0.0.0.0',
    28. // 'wsport'=>'2000',
    29. // 'wsport2'=>'2002',
    30. // 'redisport'=>'6379',
    31. // 'redisip'=>'127.0.0.1',
    32. //
    33. //]);
    34. function red(){
    35. $r=new Redis();
    36. $r->pconnect(C['redisip'],C['redisport']);
    37. return $r;
    38. }
    39. function calc($n1,$t,$n2,$prec,$rtype){
    40. switch($t){
    41. case 1:
    42. if($rtype==-1){
    43. return bcadd($n1,$n2,$prec);
    44. }else if($rtype==0){
    45. $prec1=$prec+1;
    46. $dn=str_pad('1',$prec1,'0');
    47. return bcdiv(round(bcmul(bcadd($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec);
    48. }else if($rtype==1){
    49. $prec1=$prec+1;
    50. $dn=str_pad('1',$prec1,'0');
    51. $add=bcadd($n1,$n2,64);
    52. $add2=bcadd($n1,$n2,$prec);
    53. if($add>$add2){
    54. $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec);
    55. }
    56. return $add2;
    57. }
    58. break;
    59. case 2:
    60. if($rtype==-1){
    61. return bcsub($n1,$n2,$prec);
    62. }else if($rtype==0){
    63. $prec1=$prec+1;
    64. $dn=str_pad('1',$prec1,'0');
    65. return bcdiv(round(bcmul(bcsub($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec);
    66. }else if($rtype==1){
    67. $prec1=$prec+1;
    68. $dn=str_pad('1',$prec1,'0');
    69. $add=bcsub($n1,$n2,64);
    70. $add2=bcsub($n1,$n2,$prec);
    71. if($add>$add2){
    72. $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec);
    73. }
    74. return $add2;
    75. }
    76. break;
    77. case 3:
    78. if($rtype==-1){
    79. return bcmul($n1,$n2,$prec);
    80. }else if($rtype==0){
    81. $prec1=$prec+1;
    82. $dn=str_pad('1',$prec1,'0');
    83. return bcdiv(round(bcmul(bcmul($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec);
    84. }else if($rtype==1){
    85. $prec1=$prec+1;
    86. $dn=str_pad('1',$prec1,'0');
    87. $add=bcmul($n1,$n2,64);
    88. $add2=bcmul($n1,$n2,$prec);
    89. if($add>$add2){
    90. $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec);
    91. }
    92. return $add2;
    93. }
    94. break;
    95. case 4:
    96. if($n2==0)return 0;
    97. if($rtype==-1){
    98. return bcdiv($n1,$n2,$prec);
    99. }else if($rtype==0){
    100. $prec1=$prec+1;
    101. $dn=str_pad('1',$prec1,'0');
    102. return bcdiv(round(bcmul(bcdiv($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec);
    103. }else if($rtype==1){
    104. $prec1=$prec+1;
    105. $dn=str_pad('1',$prec1,'0');
    106. $add=bcdiv($n1,$n2,64);
    107. $add2=bcdiv($n1,$n2,$prec);
    108. if($add>$add2){
    109. $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec);
    110. }
    111. return $add2;
    112. }
    113. break;
    114. }
    115. return 0;
    116. }
    117. function tz($n){
    118. return bcmul($n,100000000);
    119. }
    120. function tx($n){
    121. return bcdiv($n,100000000,8);
    122. }
    123. //显示成正常数字,防止科学计数法
    124. function shownum($num){
    125. $rnum=number_format($num,10,'.','');
    126. $rnum=trim($rnum,'0');
    127. if(substr($rnum,0,1)=='.')$rnum='0'.$rnum;
    128. if(substr($rnum,-1,1)=='.')$rnum=substr($rnum,0,-1);
    129. return $rnum;
    130. }
    131. //更新盘口数据
    132. function updatepk($r,$m,$price,$t){
    133. $pendingkey=$m.'_'.$t;
    134. $oidkey=$m.'_link_'.$price;
    135. $oc=$r->llen($oidkey);
    136. echo '盘口映射订单:长度='.$oc;
    137. if($oc){
    138. $oids=$r->lrange($oidkey, 0, $oc);
    139. $sum=0;
    140. foreach($oids as $k=>$v){
    141. $tmpd=$r->hmget('order_'.$v,['status','last']);// status : 0/1/2 进行中/成交/撤单
    142. echo 'get order data ='.json_encode($tmpd).PHP_EOL;
    143. if($tmpd['last']>0){
    144. $sum=bcadd($sum,$tmpd['last']);
    145. }else{//如果没有剩余,有问题,则更新状态
    146. if($tmpd['status']!=1){
    147. $r->hset('order_'.$v, 'status', 1);//完全成交了,但是status不是1
    148. }
    149. //从映射队列中移除
    150. $r->lrem($m.'_link_'.$price, $v, 1);//完全成交,删除盘口价格订单映射
    151. }
    152. }
    153. echo ' new count=|'.$sum.'| '.PHP_EOL;
    154. if($sum>0){
    155. $d1=$r->zremrangebyscore($pendingkey, $price, $price);
    156. $d2=$r->zadd($pendingkey, $price, '['.$price.','.$sum.']');//挂上新数据
    157. echo '删除旧盘口:'.$d1.'挂上新数据'.$d2.' price='.$price.PHP_EOL;
    158. return;
    159. }
    160. }
    161. $r->zremrangebyscore($pendingkey, $price, $price);
    162. echo '删除盘口==='.$price.PHP_EOL;
    163. }
    164. function getlasttimepoint(){
    165. // 1m,5m, 15m,30m, 1h, 1day, 1week, 1month
    166. $span=[60,300,900,1800,3600,86400,604800,0];
    167. $d=[];
    168. foreach($span as $k=>$tspan){
    169. switch($tspan){
    170. case 60: //1m
    171. $n=strtotime(date('Y-m-d H:i',time()).':00');//1m
    172. // for($i=1;$i<=$linecount;$i++){
    173. // $timepoint[]=$n-($i-1)*60;
    174. // }
    175. break;
    176. case 300: //5m
    177. $m=date('i',time());
    178. $ms=floor($m/5)*5;
    179. $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00');
    180. // for($i=1;$i<=$linecount;$i++){
    181. // $timepoint[]=$n-($i-1)*300;
    182. // }
    183. break;
    184. case 900: //15m
    185. $m=date('i',time());
    186. $ms=floor($m/15)*15;
    187. $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00');
    188. // for($i=1;$i<=$linecount;$i++){
    189. // $timepoint[]=$n-($i-1)*900;
    190. // }
    191. break;
    192. case 1800: //30m
    193. $m=date('i',time());
    194. $ms=floor($m/30)*30;
    195. $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00');
    196. // for($i=1;$i<=$linecount;$i++){
    197. // $timepoint[]=$n-($i-1)*1800;
    198. // }
    199. break;
    200. case 3600: //1h
    201. $m=date('i',time());
    202. $ms=floor($m/60)*60;
    203. $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00');
    204. // for($i=1;$i<=$linecount;$i++){
    205. // $timepoint[]=$n-($i-1)*3600;
    206. // }
    207. break;
    208. case 86400: //1d
    209. $n=strtotime(date('Y-m-d',time()).' 00:00:00');
    210. // for($i=1;$i<=$linecount;$i++){
    211. // $timepoint[]=$n-($i-1)*86400;
    212. // }
    213. break;
    214. case 604800: //1 week
    215. $now=strtotime(date('Y-m-d',time()).' 00:00:00');
    216. $w=date('w',time());
    217. if($w==0)$w=7;
    218. $n=$now-($w-1)*604800;
    219. // for($i=1;$i<=$linecount;$i++){
    220. // $timepoint[]=$n-($i-1)*604800;
    221. // }
    222. break;
    223. case 0:
    224. $m=date('Y-m').'-1 00:00:00';
    225. $n=strtotime($m);
    226. //$timepoint[]=strtotime($m);
    227. // for($i=2;$i<=$linecount;$i++){
    228. // $timepoint[]=strtotime("$m ".(-1*($i-1))." months");
    229. // }
    230. break;
    231. }
    232. $d[]=[$tspan,$n];
    233. }
    234. return $d;
    235. }
    236. //更新K线数据 redis eth_btc 0 0
    237. function updatek($r,$m,$p,$a){
    238. logs('更新K线数据:'.$m.' price='.$p.' $a='.$a);
    239. $ts=getlasttimepoint();
    240. foreach($ts as $k=>$v){
    241. $tspan=$v[0];
    242. $ts=$v[1];
    243. $kkey='k_'.$m.'_'.$tspan;
    244. $d=$r->zrangebyscore($kkey, $ts, $ts);
    245. //[123339930,155,5,7,4,2] //timestamp,amount,sp,hp,mp,ep
    246. if(empty($d)||count($d)==0||empty($d[0])){
    247. if($a==0&&$p==0){//没有成交
    248. $zlen=$r->zcard($kkey);
    249. $zlen=$zlen-1;
    250. if($zlen>=0){
    251. for($i=$zlen;$i>=0;$i--){
    252. $refd=$r->zrange($kkey, $i, $i);
    253. if(empty($refd)||count($refd)==0)break;
    254. $refarr=json_decode($refd[0],true);
    255. if(!empty($refarr[5])){
    256. $p=$refarr[5];
    257. break;
    258. }
    259. }
    260. if($p>0){
    261. $json='['.$ts.','.$a.','.$p.','.$p.','.$p.','.$p.']';
    262. $r->zadd($kkey, $ts, $json);
    263. }
    264. }
    265. }else{
    266. $json='['.$ts.','.$a.','.$p.','.$p.','.$p.','.$p.']';
    267. $r->zadd($kkey, $ts, $json);
    268. }
    269. }else{
    270. if($p>0 && $a>0){
    271. $darr=json_decode($d[0],true);
    272. $darr[5]=$p;
    273. if($darr[1]==0){
    274. $darr[1]=$a;
    275. $darr[2]=$p;
    276. $darr[3]=$p;
    277. $darr[4]=$p;
    278. }else{
    279. $darr[1]=bcadd($a,$darr[1]);
    280. if($darr[3]<$p){
    281. $darr[3]=$p;
    282. }else if($darr[4]>$p){
    283. $darr[4]=$p;
    284. }
    285. }
    286. $r->zremrangebyscore($kkey, $ts, $ts);
    287. $r->zadd($kkey, $ts, json_encode($darr));
    288. }
    289. }
    290. $zlen2=$r->zcard($kkey);
    291. $maxlen=300;
    292. if($zlen2>$maxlen){
    293. $r->zRemRangeByRank($kkey, 0, $zlen2-$maxlen-1);
    294. $zlen2=$maxlen;
    295. }
    296. }
    297. }
    298. function wsql($r,$type,$p){
    299. logs('创建SQL语句:'.$type.',params='.json_encode($p));
    300. $sql='';
    301. switch($type){
    302. case 'updateuseramount': //p=[amount=>11||amountd=>23,userid=>10005,coin=eth]
    303. $fd1='';
    304. $fd2='';
    305. if(!empty($p['amount'])){
    306. $fd1='amount='.bcdiv($p['amount'],100000000,8);
    307. }
    308. if(!empty($p['amountd'])){
    309. $fd2='amountd='.bcdiv($p['amountd'],100000000,8);
    310. }
    311. $fd='';
    312. if(!empty($fd1)&&!empty($fd2)){
    313. $fd=$fd1.','.$fd2;
    314. }else{
    315. $fd=$fd1.$fd2;
    316. }
    317. if(!empty($fd)){
    318. $sql='update usercoin set '.$fd.' where userid='.$p['userid'].' and coin=\''.$p['coin'].'\'';
    319. }
    320. break;
    321. case 'addorder': //p=['orderid','userid','m','p','amount','deal','t','status']
    322. $p['a']=bcdiv($p['a'],100000000,8);
    323. $p['deal']=bcdiv($p['deal'],100000000,8);
    324. $isapi=!empty($p['isapi'])?1:0;
    325. $sql='insert into movesay_trade(id,userid,market,price,num,deal,type,addtime,status,isapi)values(';
    326. $sql.=$p['orderid'].','.$p['userid'].',\''.$p['m'].'\','.$p['p'].','.$p['a'].','.$p['deal'].','.$p['t'].','.time().','.$p['status'].','.$isapi.')';
    327. break;
    328. case 'updateorder': //p=['orderid','field'=>[???]]
    329. $upstr='';
    330. if(!empty($p['field']['deal']))$p['field']['deal']=bcdiv($p['field']['deal'],100000000,8);
    331. foreach($p['field'] as $k=>$v){
    332. $upstr.=$k.'='.$v.',';
    333. }
    334. $upstr.='id='.$p['orderid'];
    335. $sql='update movesay_trade set '.$upstr.' where id='.$p['orderid'];
    336. break;
    337. case 'addtrade': //p=['userid','touserid','m','p','amount','fee','t','bid','sid']
    338. $p['amount']=bcdiv($p['amount'],100000000,8);
    339. $sql='insert into movesay_trade_log(userid,peerid,market,price,num,fee_buy,fee_sell,type,addtime,buy_id,sell_id)values(';
    340. $sql.=$p['userid'].','.$p['touserid'].',\''.$p['m'].'\','.$p['p'].','.$p['amount'].','.$p['fee_buy'].','.$p['fee_sell'].','.$p['t'].','.time().','.$p['bid'].','.$p['sid'].')';
    341. break;
    342. }
    343. if(!empty($sql))$r->lpush('lsql',$sql);
    344. }
    345. function getuidbypubkey($r,$pubkey){
    346. return $r->get('public_key_'.$pubkey);
    347. }
    348. function decimallen($n){
    349. $pp=strpos($n.'','.');
    350. if(!$pp)return 0;
    351. $plen=strlen($n.'')-$pp-1;
    352. return $plen;
    353. }
    354. function isnum($n){
    355. return preg_match('/^[0-9]+(.[0-9]+)?$/', $n);
    356. }
    357. // 获取根据身份证取省市
    358. function get_province_city( $cardnumber ) {
    359. $top_four = substr( strval( $cardnumber ), 0, 4 );
    360. $province_cities = [
    361. '1100' => '北京市',
    362. '1101' => '北京市',
    363. '1102' => '北京市',
    364. '1200' => '天津市',
    365. '1201' => '天津市',
    366. '1202' => '天津市',
    367. '1300' => '',
    368. '1301' => '石家庄市',
    369. '1302' => '唐山市',
    370. '1303' => '秦皇岛市',
    371. '1304' => '邯郸市邯郸市',
    372. '1305' => '邢台市',
    373. '1306' => '保定市',
    374. '1307' => '张家口市',
    375. '1308' => '承德市',
    376. '1309' => '沧州市',
    377. '1310' => '廊坊市',
    378. '1311' => '衡水市',
    379. '1400' => '',
    380. '1401' => '太原市',
    381. '1402' => '大同市',
    382. '1403' => '阳泉市',
    383. '1404' => '长治市',
    384. '1405' => '晋城市',
    385. '1406' => '朔州市',
    386. '1422' => '忻州市',
    387. '1423' => '吕梁市',
    388. '1424' => '晋中市',
    389. '1426' => '临汾市',
    390. '1427' => '运城市',
    391. '1500' => '',
    392. '1501' => '呼和浩特市',
    393. '1502' => '包头市',
    394. '1503' => '乌海市',
    395. '1504' => '赤峰市',
    396. '1521' => '呼伦贝尔市',
    397. '1522' => '兴安盟',
    398. // '1523' => '哲里木盟', // 通辽市
    399. '1523' => '通辽市', // 通辽市
    400. '1525' => '锡林郭勒盟',
    401. '1526' => '乌兰察布市',
    402. // '1527' => '伊克昭盟', // 鄂尔多斯市
    403. '1527' => '鄂尔多斯市', // 鄂尔多斯市
    404. '1528' => '巴彦淖尔市',
    405. '1529' => '阿拉善盟',
    406. '2100' => '',
    407. '2101' => '沈阳市',
    408. '2102' => '大连市',
    409. '2103' => '鞍山市',
    410. '2104' => '抚顺市',
    411. '2105' => '本溪市',
    412. '2106' => '丹东市',
    413. '2107' => '锦州市',
    414. '2108' => '营口市',
    415. '2109' => '阜新市',
    416. '2110' => '辽阳市',
    417. '2111' => '盘锦市',
    418. '2112' => '铁岭市',
    419. '2113' => '朝阳市',
    420. '2114' => '葫芦岛市',
    421. '2200' => '',
    422. '2201' => '长春市',
    423. '2202' => '吉林市',
    424. '2203' => '四平市',
    425. '2204' => '辽源市',
    426. '2205' => '通化市',
    427. '2206' => '白山市',
    428. '2207' => '松原市',
    429. '2208' => '白城市',
    430. '2224' => '延边朝鲜族自治州',
    431. '2300' => '',
    432. '2301' => '哈尔滨市',
    433. '2302' => '齐齐哈尔市',
    434. '2303' => '鸡西市',
    435. '2304' => '鹤岗市',
    436. '2305' => '双鸭山市',
    437. '2306' => '大庆市',
    438. '2307' => '伊春市',
    439. '2308' => '佳木斯市',
    440. '2309' => '七台河市',
    441. '2310' => '牡丹江市',
    442. '2311' => '黑河市',
    443. '2323' => '绥化市',
    444. '2327' => '大兴安岭地区',
    445. '3100' => '上海市',
    446. '3101' => '上海市',
    447. '3102' => '上海市',
    448. '3200' => '',
    449. '3201' => '南京市',
    450. '3202' => '无锡市',
    451. '3203' => '徐州市',
    452. '3204' => '常州市',
    453. '3205' => '苏州市',
    454. '3206' => '南通市',
    455. '3207' => '连云港市',
    456. '3208' => '淮阴市',
    457. '3209' => '盐城市',
    458. '3210' => '扬州市',
    459. '3211' => '镇江市',
    460. '3212' => '泰州市',
    461. '3213' => '宿迁市',
    462. '3300' => '',
    463. '3301' => '杭州市',
    464. '3302' => '宁波市',
    465. '3303' => '温州市',
    466. '3304' => '嘉兴市',
    467. '3305' => '湖州市',
    468. '3306' => '绍兴市',
    469. '3307' => '金华市',
    470. '3308' => '衢州市',
    471. '3309' => '舟山市',
    472. '3310' => '台州市',
    473. '3325' => '丽水市',
    474. '3400' => '',
    475. '3401' => '合肥市',
    476. '3402' => '芜湖市',
    477. '3403' => '蚌埠市',
    478. '3404' => '淮南市',
    479. '3405' => '马鞍山市',
    480. '3406' => '淮北市',
    481. '3407' => '铜陵市',
    482. '3408' => '安庆市',
    483. '3410' => '黄山市',
    484. '3411' => '滁州市',
    485. '3412' => '阜阳市',
    486. '3413' => '宿州市',
    487. '3424' => '六安市',
    488. '3425' => '宣城市',
    489. '3426' => '巢湖地区',
    490. '3429' => '池州市',
    491. '3500' => '',
    492. '3501' => '福州市',
    493. '3502' => '厦门市',
    494. '3503' => '莆田市',
    495. '3504' => '三明市',
    496. '3505' => '泉州市',
    497. '3506' => '漳州市',
    498. '3507' => '南平市',
    499. '3508' => '龙岩市',
    500. '3522' => '宁德市',
    501. '3600' => '',
    502. '3601' => '南昌市',
    503. '3602' => '景德镇市',
    504. '3603' => '萍乡市',
    505. '3604' => '九江市',
    506. '3605' => '新余市',
    507. '3606' => '鹰潭市',
    508. '3607' => '赣州市',
    509. '3622' => '宜春市',
    510. '3623' => '上饶市',
    511. '3624' => '吉安市',
    512. '3625' => '抚州市',
    513. '3700' => '',
    514. '3701' => '济南市',
    515. '3702' => '青岛市',
    516. '3703' => '淄博市',
    517. '3704' => '枣庄市',
    518. '3705' => '东营市',
    519. '3706' => '烟台市',
    520. '3707' => '潍坊市',
    521. '3708' => '济宁市',
    522. '3709' => '泰安市',
    523. '3710' => '威海市',
    524. '3711' => '日照市',
    525. '3712' => '莱芜市',
    526. '3713' => '临沂市',
    527. '3714' => '德州市',
    528. '3715' => '聊城市',
    529. '3723' => '滨州市',
    530. '3729' => '菏泽市',
    531. '4100' => '',
    532. '4101' => '郑州市',
    533. '4102' => '开封市',
    534. '4103' => '洛阳市',
    535. '4104' => '平顶山市',
    536. '4105' => '安阳市',
    537. '4106' => '鹤壁市',
    538. '4107' => '新乡市',
    539. '4108' => '焦作市',
    540. '4109' => '濮阳市',
    541. '4110' => '许昌市',
    542. '4111' => '漯河市',
    543. '4112' => '三门峡市',
    544. '4113' => '南阳市',
    545. '4114' => '商丘市',
    546. '4115' => '信阳市',
    547. '4127' => '周口市',
    548. '4128' => '驻马店市',
    549. '4200' => '',
    550. '4201' => '武汉市',
    551. '4202' => '黄石市',
    552. '4203' => '十堰市',
    553. '4205' => '宜昌市',
    554. '4206' => '襄樊市',
    555. '4207' => '鄂州市',
    556. '4208' => '荆门市',
    557. '4209' => '孝感市',
    558. '4210' => '荆州市',
    559. '4211' => '黄冈市',
    560. '4212' => '咸宁市',
    561. '4228' => '恩施土家族苗族自治州',
    562. // '4290' => '省直辖县级行政单位',
    563. '4290' => ['随州市', '潜江市', '天门市','神农架林区',],
    564. '4300' => '',
    565. '4301' => '长沙市',
    566. '4302' => '株洲市',
    567. '4303' => '湘潭市',
    568. '4304' => '衡阳市',
    569. '4305' => '邵阳市',
    570. '4306' => '岳阳市',
    571. '4307' => '常德市',
    572. '4308' => '张家界市',
    573. '4309' => '益阳市',
    574. '4310' => '郴州市',
    575. '4311' => '永州市',
    576. '4312' => '怀化市',
    577. '4325' => '娄底市',
    578. '4330' => '怀化市',
    579. '4331' => '湘西土家族苗族自治州',
    580. '4400' => '',
    581. '4401' => '广州市',
    582. // '4401' => '广州市市辖区',
    583. // '4401' => '广州市东山区',
    584. // '4401' => '广州市荔湾区',
    585. // '4401' => '广州市越秀区',
    586. // '4401' => '广州市海珠区',
    587. // '4401' => '广州市天河区',
    588. // '4401' => '广州市芳村区',
    589. // '4401' => '广州市白云区',
    590. // '4401' => '广州市黄埔区',
    591. // '4401' => '广州市番禺市',
    592. // '4401' => '广州市花都市',
    593. // '4401' => '广州市增城市',
    594. // '4401' => '广州市从化市',
    595. '4402' => '韶关市',
    596. '4403' => '深圳市',
    597. '4404' => '珠海市',
    598. '4405' => '汕头市',
    599. '4406' => '佛山市',
    600. '4407' => '江门市',
    601. '4408' => '湛江市',
    602. '4409' => '茂名市',
    603. '4412' => '肇庆市',
    604. '4413' => '惠州市',
    605. '4414' => '梅州市',
    606. '4415' => '汕尾市',
    607. '4416' => '河源市',
    608. '4417' => '阳江市',
    609. '4418' => '清远市',
    610. '4419' => '东莞市',
    611. // '4419' => '东莞市市辖区',
    612. '4420' => '中山市',
    613. '4425' => '东莞市',
    614. // '4420' => '中山市市辖区',
    615. '4451' => '潮州市',
    616. '4452' => '揭阳市',
    617. '4453' => '云浮市',
    618. '4500' => '',
    619. '4501' => '南宁市',
    620. '4502' => '柳州市',
    621. '4503' => '桂林市',
    622. '4504' => '梧州市',
    623. '4505' => '北海市',
    624. '4506' => '防城港市',
    625. '4507' => '钦州市',
    626. '4508' => '贵港市',
    627. '4509' => '玉林市',
    628. '4521' => '南宁市',
    629. '4522' => '柳州市',
    630. '4524' => '贺州市',
    631. '4526' => '百色市',
    632. '4527' => '河池市',
    633. '4600' => '儋州市',
    634. '4601' => '海口市',
    635. '4602' => '三亚市',
    636. '5000' => '重庆市',
    637. '5001' => ['万州区及周边区县', '涪陵区及周边区县'],
    638. '5002' => '重庆市',
    639. '5003' => '重庆市',
    640. '5100' => '',
    641. '5101' => '成都市',
    642. '5103' => '自贡市',
    643. '5104' => '攀枝花市',
    644. '5105' => '泸州市',
    645. '5106' => '德阳市',
    646. '5107' => '绵阳市',
    647. '5108' => '广元市',
    648. '5109' => '遂宁市',
    649. '5110' => '内江市',
    650. '5111' => '乐山市',
    651. '5113' => '南充市',
    652. '5115' => '宜宾市',
    653. '5116' => '广安市',
    654. '5130' => '达州市',
    655. '5131' => '雅安市',
    656. '5132' => '阿坝藏族羌族自治州',
    657. '5133' => '甘孜藏族自治州',
    658. '5134' => '凉山彝族自治州',
    659. '5137' => '巴中市',
    660. '5138' => '眉山市',
    661. '5139' => '资阳市',
    662. '5200' => '贵州省',
    663. '5201' => '贵阳市',
    664. '5202' => '六盘水市',
    665. '5203' => '遵义市',
    666. '5222' => '铜仁地区',
    667. '5223' => '黔西南布依族苗族自治州',
    668. '5224' => '毕节市',
    669. '5225' => '安顺市',
    670. '5226' => '黔东南苗族侗族自治州',
    671. '5227' => '黔南布依族苗族自治州',
    672. '5300' => '',
    673. '5301' => '昆明市',
    674. '5303' => '曲靖市',
    675. '5304' => '玉溪市',
    676. '5321' => '昭通市',
    677. '5323' => '楚雄彝族自治州',
    678. '5325' => '红河哈尼族彝族自治州',
    679. '5326' => '文山壮族苗族自治州',
    680. '5327' => '普洱市',
    681. '5328' => '西双版纳傣族自治州',
    682. '5329' => '大理白族自治州',
    683. '5330' => '保山市',
    684. '5331' => '德宏傣族景颇族自治州',
    685. '5332' => '丽江市',
    686. '5333' => '怒江傈僳族自治州',
    687. '5334' => '迪庆藏族自治州',
    688. '5335' => '临沧市',
    689. '5400' => '',
    690. '5401' => '拉萨市',
    691. '5421' => '昌都市',
    692. '5422' => '山南地区',
    693. '5423' => '日喀则市',
    694. '5424' => '那曲地区',
    695. '5425' => '阿里地区',
    696. '5426' => '林芝地区',
    697. '6100' => '',
    698. '6101' => '西安市',
    699. '6102' => '铜川市',
    700. '6103' => '宝鸡市',
    701. '6104' => '咸阳市',
    702. '6105' => '渭南市',
    703. '6106' => '延安市',
    704. '6107' => '汉中市',
    705. '6124' => '安康市',
    706. '6125' => '商洛市',
    707. '6127' => '榆林市',
    708. '6200' => '',
    709. '6201' => '兰州市',
    710. '6202' => '嘉峪关市',
    711. '6203' => '金昌市',
    712. '6204' => '白银市',
    713. '6205' => '天水市',
    714. '6221' => '酒泉市',
    715. '6222' => '张掖市',
    716. '6223' => '武威市',
    717. '6224' => '定西市',
    718. '6226' => '陇南市',
    719. '6227' => '平凉市',
    720. '6228' => '庆阳市',
    721. '6229' => '临夏回族自治州',
    722. '6230' => '甘南藏族自治州',
    723. '6300' => '',
    724. '6301' => '西宁市',
    725. '6321' => '海东市',
    726. '6322' => '海北藏族自治州',
    727. '6323' => '黄南藏族自治州',
    728. '6325' => '海南藏族自治州',
    729. '6326' => '果洛藏族自治州',
    730. '6327' => '玉树藏族自治州',
    731. '6400' => '',
    732. '6401' => '银川市',
    733. '6402' => '石嘴山市',
    734. '6403' => '吴忠市',
    735. '6422' => '固原市',
    736. '6500' => '',
    737. '6501' => '乌鲁木齐市',
    738. '6502' => '克拉玛依市',
    739. '6521' => '吐鲁番地区',
    740. '6522' => '哈密地区',
    741. '6523' => '昌吉回族自治州',
    742. '6527' => '博尔塔拉蒙古自治州',
    743. '6528' => '巴音郭楞蒙古自治州',
    744. '6529' => '阿克苏地区',
    745. '6530' => '克孜勒苏柯尔克孜自治州',
    746. '6531' => '喀什地区',
    747. '6532' => '和田地区',
    748. '6540' => '伊犁哈萨克自治州',
    749. '6541' => '奎屯市',
    750. '6542' => '塔城地区',
    751. '6543' => '阿勒泰地区',
    752. // '6590' => '直辖县级行政单位',
    753. '6590' => '石河子市',
    754. ];
    755. if (!isset($province_cities[ $top_four ]) || empty($province_cities[ $top_four ]) ) {
    756. return "广州市";
    757. }
    758. // 值为数据 随机一个value
    759. if ( is_array( $province_cities[ $top_four ] ) ) {
    760. $k = array_rand( $province_cities[ $top_four ], 1 );
    761. return $province_cities[ $top_four ][ $k ];
    762. }
    763. return $province_cities[ $top_four ];
    764. }
    765. // 根据省市获取车牌
    766. function get_plate_by_city($city) {
    767. global $db;
    768. $play_city = [
    769. '云A' => '昆明市',
    770. '云C' => '昭通市',
    771. '云D' => '曲靖市',
    772. '云E' => '楚雄彝族自治州',
    773. '云F' => '玉溪市',
    774. '云G' => '红河哈尼族彝族自治州',
    775. '云H' => '文山壮族苗族自治州',
    776. '云J' => '普洱市',
    777. '云K' => '西双版纳傣族自治州',
    778. '云L' => '大理白族自治州',
    779. '云M' => '保山市',
    780. '云N' => '德宏傣族景颇族自治州',
    781. '云P' => '丽江市',
    782. '云Q' => '怒江傈僳族自治州',
    783. '云R' => '迪庆藏族自治州',
    784. '云S' => '临沧市',
    785. '云V' => '昆明市东川区',
    786. '京A' => '北京市',
    787. '京B' => '北京市出租汽车',
    788. '京C' => '北京市',
    789. '京D' => '暂未发放',
    790. '京E' => '北京市',
    791. '京F' => '北京市',
    792. '京G' => '北京市郊区县',
    793. '京H' => '北京市',
    794. '京J' => '北京市',
    795. '京K' => '北京市',
    796. '京L' => '北京市',
    797. '京M' => '北京市',
    798. '京N' => '北京市',
    799. '京P' => '北京市',
    800. '京Q' => '北京市',
    801. '冀A' => '石家庄市',
    802. '冀B' => '唐山市',
    803. '冀C' => '秦皇岛市',
    804. '冀D' => '邯郸市',
    805. '冀E' => '邢台市',
    806. '冀F' => '保定市',
    807. '冀G' => '张家口市',
    808. '冀H' => '承德市',
    809. '冀J' => '沧州市',
    810. '冀R' => '廊坊市',
    811. '冀T' => '衡水市',
    812. '吉A' => '长春市',
    813. '吉B' => '吉林市',
    814. '吉C' => '四平市',
    815. '吉D' => '辽源市',
    816. '吉E' => '通化市',
    817. '吉F' => '白山市',
    818. '吉G' => '白城市',
    819. '吉H' => '延边朝鲜族自治州',
    820. '吉J' => '松原市',
    821. '吉K' => '长白山管委会',
    822. '宁A' => '银川市',
    823. '宁B' => '石嘴山市',
    824. '宁C' => '吴忠市',
    825. '宁D' => '固原市',
    826. '宁E' => '中卫市',
    827. '川A' => '成都市',
    828. '川B' => '绵阳市',
    829. '川C' => '自贡市',
    830. '川D' => '攀枝花市',
    831. '川E' => '泸州市',
    832. '川F' => '德阳市',
    833. '川G' => '成都市',
    834. '川H' => '广元市',
    835. '川J' => '遂宁市',
    836. '川K' => '内江市',
    837. '川L' => '乐山市',
    838. '川M' => '资阳市',
    839. '川Q' => '宜宾市',
    840. '川R' => '南充市',
    841. '川S' => '达州市',
    842. '川T' => '雅安市',
    843. '川U' => '阿坝藏族羌族自治州',
    844. '川V' => '甘孜藏族自治州',
    845. '川W' => '凉山彝族自治州',
    846. '川X' => '广安市',
    847. '川Y' => '巴中市',
    848. '川Z' => '眉山市',
    849. '新A' => '乌鲁木齐市',
    850. '新B' => '昌吉回族自治州',
    851. '新C' => '石河子市',
    852. '新D' => '奎屯市',
    853. '新E' => '博尔塔拉蒙古自治州',
    854. '新F' => '伊犁哈萨克自治州',
    855. '新G' => '塔城地区',
    856. '新H' => '阿勒泰地区',
    857. '新J' => '克拉玛依市',
    858. '新K' => '吐鲁番地区',
    859. '新L' => '哈密地区',
    860. '新M' => '巴音郭楞蒙古自治州',
    861. '新N' => '阿克苏地区',
    862. '新P' => '克孜勒苏柯尔克孜自治州',
    863. '新Q' => '喀什地区',
    864. '新R' => '和田地区',
    865. '晋A' => '太原市',
    866. '晋B' => '大同市',
    867. '晋C' => '阳泉市',
    868. '晋D' => '长治市',
    869. '晋E' => '晋城市',
    870. '晋F' => '朔州市',
    871. '晋H' => '忻州市',
    872. '晋J' => '吕梁市',
    873. '晋K' => '晋中市',
    874. '晋L' => '临汾市',
    875. '晋M' => '运城市',
    876. '桂A' => '南宁市',
    877. '桂B' => '柳州市',
    878. '桂C' => '桂林市',
    879. '桂D' => '梧州市',
    880. '桂E' => '北海市',
    881. '桂F' => '崇左市',
    882. '桂G' => '来宾市',
    883. '桂H' => '桂林市下辖县',
    884. '桂J' => '贺州市',
    885. '桂K' => '玉林市',
    886. '桂L' => '百色市',
    887. '桂M' => '河池市',
    888. '桂N' => '钦州市',
    889. '桂P' => '防城港市',
    890. '桂R' => '贵港市',
    891. '沪A' => '上海市',
    892. '沪B' => '上海市',
    893. '沪C' => '上海市',
    894. '沪D' => '上海市',
    895. '沪E' => '上海市',
    896. '沪G' => '上海市',
    897. '沪H' => '上海市',
    898. '沪J' => '上海市',
    899. '沪K' => '上海市',
    900. '沪L' => '上海市',
    901. '沪M' => '上海市',
    902. '沪N' => '上海市',
    903. '津A' => '天津市',
    904. '津B' => '天津市',
    905. '津C' => '天津市',
    906. '津D' => '天津市',
    907. '津E' => '天津市出租汽车',
    908. '津F' => '天津市',
    909. '津G' => '天津市',
    910. '津H' => '天津市',
    911. '津J' => '天津市',
    912. '津K' => '天津市',
    913. '津L' => '天津市',
    914. '津M' => '天津市',
    915. '津N' => '天津市',
    916. '津Q' => '天津市',
    917. '津R' => '天津市',
    918. '浙A' => '杭州市',
    919. '浙B' => '宁波市',
    920. '浙C' => '温州市',
    921. '浙D' => '绍兴市',
    922. '浙E' => '湖州市',
    923. '浙F' => '嘉兴市',
    924. '浙G' => '金华市',
    925. '浙H' => '衢州市',
    926. '浙J' => '台州市',
    927. '浙K' => '丽水市',
    928. '浙L' => '舟山市',
    929. '渝A' => '重庆市',
    930. '渝B' => '重庆市',
    931. '渝C' => '重庆近郊区县',
    932. '渝F' => '万州区及周边区县',
    933. '渝G' => '涪陵区及周边区县',
    934. '渝H' => '黔江区及周边区县',
    935. '湘A' => '长沙市',
    936. '湘B' => '株洲市',
    937. '湘C' => '湘潭市',
    938. '湘D' => '衡阳市',
    939. '湘E' => '邵阳市',
    940. '湘F' => '岳阳市',
    941. '湘G' => '张家界市',
    942. '湘H' => '益阳市',
    943. '湘J' => '常德市',
    944. '湘K' => '娄底市',
    945. '湘L' => '郴州市',
    946. '湘M' => '永州市',
    947. '湘N' => '怀化市',
    948. '湘S' => '省直系统',
    949. '湘U' => '湘西土家族苗族自治州',
    950. '琼A' => '海口市',
    951. '琼B' => '三亚市',
    952. '琼E' => '洋浦开发区',
    953. '琼F' => '儋州市',
    954. '甘A' => '兰州市',
    955. '甘B' => '嘉峪关市',
    956. '甘C' => '金昌市',
    957. '甘D' => '白银市',
    958. '甘E' => '天水市',
    959. '甘F' => '酒泉市',
    960. '甘G' => '张掖市',
    961. '甘H' => '武威市',
    962. '甘J' => '定西市',
    963. '甘K' => '陇南市',
    964. '甘L' => '平凉市',
    965. '甘M' => '庆阳市',
    966. '甘N' => '临夏回族自治州',
    967. '甘P' => '甘南藏族自治州',
    968. '皖A' => '合肥市',
    969. '皖B' => '芜湖市',
    970. '皖C' => '蚌埠市',
    971. '皖D' => '淮南市',
    972. '皖E' => '马鞍山市',
    973. '皖F' => '淮北市',
    974. '皖G' => '铜陵市',
    975. '皖H' => '安庆市',
    976. '皖J' => '黄山市',
    977. '皖K' => '阜阳市',
    978. '皖L' => '宿州市',
    979. '皖M' => '滁州市',
    980. '皖N' => '六安市',
    981. '皖P' => '宣城市',
    982. '皖R' => '池州市',
    983. '皖S' => '毫州市',
    984. '粤A' => '广州市',
    985. '粤B' => '深圳市',
    986. '粤C' => '珠海市',
    987. '粤D' => '汕头市',
    988. '粤E' => '佛山市',
    989. '粤F' => '韶关市',
    990. '粤G' => '湛江市',
    991. '粤H' => '肇庆市',
    992. '粤J' => '江门市',
    993. '粤K' => '茂名市',
    994. '粤L' => '惠州市',
    995. '粤M' => '梅州市',
    996. '粤N' => '汕尾市',
    997. '粤P' => '河源市',
    998. '粤Q' => '阳江市',
    999. '粤R' => '清远市',
    1000. '粤S' => '东莞市',
    1001. '粤T' => '中山市',
    1002. '粤U' => '潮州市',
    1003. '粤V' => '揭阳市',
    1004. '粤W' => '云浮市',
    1005. '粤X' => '佛山市顺德区',
    1006. '粤Y' => '佛山市南海区',
    1007. '粤Z' => '港澳',
    1008. '苏A' => '南京市',
    1009. '苏B' => '无锡市',
    1010. '苏C' => '徐州市',
    1011. '苏D' => '常州市',
    1012. '苏E' => '苏州市',
    1013. '苏F' => '南通市',
    1014. '苏G' => '连云港市',
    1015. '苏H' => '淮安市',
    1016. '苏J' => '盐城市',
    1017. '苏K' => '扬州市',
    1018. '苏L' => '镇江市',
    1019. '苏M' => '泰州市',
    1020. '苏N' => '宿迁市',
    1021. '蒙A' => '呼和浩特市',
    1022. '蒙B' => '包头市',
    1023. '蒙C' => '乌海市',
    1024. '蒙D' => '赤峰市',
    1025. '蒙E' => '呼伦贝尔市',
    1026. '蒙F' => '兴安盟',
    1027. '蒙G' => '通辽市',
    1028. '蒙H' => '锡林郭勒盟',
    1029. '蒙J' => '乌兰察布市',
    1030. '蒙K' => '鄂尔多斯市',
    1031. '蒙L' => '巴彦淖尔市',
    1032. '蒙M' => '阿拉善盟',
    1033. '藏A' => '拉萨市',
    1034. '藏B' => '昌都市',
    1035. '藏C' => '山南地区',
    1036. '藏D' => '日喀则市',
    1037. '藏E' => '那曲地区',
    1038. '藏F' => '阿里地区',
    1039. '藏G' => '林芝地区',
    1040. '藏H' => '驻四川省天全县车辆管理所',
    1041. '藏J' => '驻青海省格尔木市车辆管理所',
    1042. '豫A' => '郑州市',
    1043. '豫B' => '开封市',
    1044. '豫C' => '洛阳市',
    1045. '豫D' => '平顶山市',
    1046. '豫E' => '安阳市',
    1047. '豫F' => '鹤壁市',
    1048. '豫G' => '新乡市',
    1049. '豫H' => '焦作市',
    1050. '豫J' => '濮阳市',
    1051. '豫K' => '许昌市',
    1052. '豫L' => '漯河市',
    1053. '豫M' => '三门峡市',
    1054. '豫N' => '商丘市',
    1055. '豫P' => '周口市',
    1056. '豫Q' => '驻马店市',
    1057. '豫R' => '南阳市',
    1058. '豫S' => '信阳市',
    1059. '豫U' => '济源市',
    1060. '贵A' => '贵阳市',
    1061. '贵B' => '六盘水市',
    1062. '贵C' => '遵义市',
    1063. '贵D' => '铜仁市',
    1064. '贵E' => '黔西南布依族苗族自治州',
    1065. '贵F' => '毕节市',
    1066. '贵G' => '安顺市',
    1067. '贵H' => '黔东南苗族侗族自治州',
    1068. '贵J' => '黔南布依族苗族自治州',
    1069. '赣A' => '南昌市',
    1070. '赣B' => '赣州市',
    1071. '赣C' => '宜春市',
    1072. '赣D' => '吉安市',
    1073. '赣E' => '上饶市',
    1074. '赣F' => '抚州市',
    1075. '赣G' => '九江市',
    1076. '赣H' => '景德镇市',
    1077. '赣J' => '萍乡市',
    1078. '赣K' => '新余市',
    1079. '赣L' => '鹰潭市',
    1080. '赣M' => '南昌市',
    1081. '辽A' => '沈阳市',
    1082. '辽B' => '大连市',
    1083. '辽C' => '鞍山市',
    1084. '辽D' => '抚顺市',
    1085. '辽E' => '本溪市',
    1086. '辽F' => '丹东市',
    1087. '辽G' => '锦州市',
    1088. '辽H' => '营口市',
    1089. '辽J' => '阜新市',
    1090. '辽K' => '辽阳市',
    1091. '辽L' => '盘锦市',
    1092. '辽M' => '铁岭市',
    1093. '辽N' => '朝阳市',
    1094. '辽P' => '葫芦岛市',
    1095. '鄂A' => '武汉市',
    1096. '鄂B' => '黄石市',
    1097. '鄂C' => '十堰市',
    1098. '鄂D' => '荆州市',
    1099. '鄂E' => '宜昌市',
    1100. '鄂F' => '襄阳市',
    1101. '鄂G' => '鄂州市',
    1102. '鄂H' => '荆门市',
    1103. '鄂J' => '黄冈市',
    1104. '鄂K' => '孝感市',
    1105. '鄂L' => '咸宁市',
    1106. '鄂M' => '仙桃市',
    1107. '鄂N' => '潜江市',
    1108. '鄂P' => '神农架林区',
    1109. '鄂Q' => '恩施土家族苗族自治州',
    1110. '鄂R' => '天门市',
    1111. '鄂S' => '随州市',
    1112. '闽A' => '福州市',
    1113. '闽B' => '莆田市',
    1114. '闽C' => '泉州市',
    1115. '闽D' => '厦门市',
    1116. '闽E' => '漳州市',
    1117. '闽F' => '龙岩市',
    1118. '闽G' => '三明市',
    1119. '闽H' => '南平市',
    1120. '闽J' => '宁德市',
    1121. '闽K' => '平潭综合实验区',
    1122. '陕A' => '西安市',
    1123. '陕B' => '铜川市',
    1124. '陕C' => '宝鸡市',
    1125. '陕D' => '咸阳市',
    1126. '陕E' => '渭南市',
    1127. '陕F' => '汉中市',
    1128. '陕G' => '安康市',
    1129. '陕H' => '商洛市',
    1130. '陕J' => '延安市',
    1131. '陕K' => '榆林市',
    1132. '陕V' => '杨陵农业示范区',
    1133. '青A' => '西宁市',
    1134. '青B' => '海东市',
    1135. '青C' => '海北藏族自治州',
    1136. '青D' => '黄南藏族自治州',
    1137. '青E' => '海南藏族自治州',
    1138. '青F' => '果洛藏族自治州',
    1139. '青G' => '玉树藏族自治州',
    1140. '青H' => '海西蒙古族藏族自治州',
    1141. '鲁A' => '济南市',
    1142. '鲁B' => '青岛市',
    1143. '鲁C' => '淄博市',
    1144. '鲁D' => '枣庄市',
    1145. '鲁E' => '东营市',
    1146. '鲁F' => '烟台市',
    1147. '鲁G' => '潍坊市',
    1148. '鲁H' => '济宁市',
    1149. '鲁J' => '泰安市',
    1150. '鲁K' => '威海市',
    1151. '鲁L' => '日照市',
    1152. '鲁M' => '滨州市',
    1153. '鲁N' => '德州市',
    1154. '鲁P' => '聊城市',
    1155. '鲁Q' => '临沂市',
    1156. '鲁R' => '菏泽市',
    1157. '鲁S' => '莱芜市',
    1158. '鲁U' => '青岛市增补',
    1159. '鲁V' => '潍坊市增补',
    1160. '鲁W' => '省直系统',
    1161. '鲁Y' => '烟台市增补',
    1162. '黑A' => '哈尔滨市',
    1163. '黑B' => '齐齐哈尔市',
    1164. '黑C' => '牡丹江市',
    1165. '黑D' => '佳木斯市',
    1166. '黑E' => '大庆市',
    1167. '黑F' => '伊春市',
    1168. '黑G' => '鸡西市',
    1169. '黑H' => '鹤岗市',
    1170. '黑J' => '双鸭山市',
    1171. '黑K' => '七台河市',
    1172. '黑L' => '哈尔滨市',
    1173. '黑M' => '绥化市',
    1174. '黑N' => '黑河市',
    1175. '黑P' => '大兴安岭地区',
    1176. '黑R' => '农垦系统',
    1177. ];
    1178. $city_short = array_search($city, shuffle_assoc($play_city));
    1179. if (!$city_short) {
    1180. $city_short = "粤A";
    1181. }
    1182. $numbers = generate_random_numbers();
    1183. $flag = false;
    1184. for ($i=0; $i<50; ++$i) {
    1185. $numbers = generate_random_numbers();
    1186. $plate = $city_short . $numbers; // 车牌
    1187. // 查出当前城市是否已存在牌照数字
    1188. $sql = "select count(*) counts from user_items where plate='$plate'";
    1189. $row = $db->query($sql);
    1190. if (!$row) {
    1191. $flag = true;
    1192. break;
    1193. }
    1194. if (!$row[0]['counts']) {
    1195. $flag = true;
    1196. break;
    1197. }
    1198. }
    1199. if (!$flag) {
    1200. return false;
    1201. }
    1202. return $city_short . $numbers;
    1203. }
    1204. // 随机数组元素
    1205. function shuffle_assoc($array)
    1206. {
    1207. // Initialize
    1208. $shuffled_array = array();
    1209. // Get array's keys and shuffle them.
    1210. $shuffled_keys = array_keys($array);
    1211. shuffle($shuffled_keys);
    1212. // Create same array, but in shuffled order.
    1213. foreach ( $shuffled_keys AS $shuffled_key ) {
    1214. $shuffled_array[ $shuffled_key ] = $array[ $shuffled_key ];
    1215. } // foreach
    1216. // Return
    1217. return $shuffled_array;
    1218. }
    1219. // 5位随机数字 最多3位连续一样的数字
    1220. //function generate_random_numbers($exit_numbers){
    1221. // $array = range(00000, 99999);
    1222. // foreach ($array as $k=>$v) {
    1223. // // 过滤已发的牌照
    1224. // if (in_array($v ,$exit_numbers)) {
    1225. // $key2 = array_search($v, $array);
    1226. // unset($array[$key2]);
    1227. // }
    1228. // // 过滤最多3次重复数字
    1229. // if (preg_match("/(\d)\\1{3,}/",$v)) {
    1230. // $key = array_search($v, $array);
    1231. // unset($array[$key]);
    1232. // }
    1233. // }
    1234. // shuffle($array);
    1235. // return isset($array[0]) ? sprintf("%'.05d", $array[0]) : 0;
    1236. //}
    1237. function generate_random_numbers(){
    1238. $ns=['0','1','2','3','4','5','7','9'];
    1239. $number='';
    1240. $len=5;
    1241. for($i=0;$i<$len;$i++){
    1242. if(count($ns)==0)break;
    1243. $index=rand(0,count($ns)-1);
    1244. $number.=$ns[$index];
    1245. unset($ns[$index]);
    1246. $ns=array_values($ns);
    1247. }
    1248. if(strlen($number)==$len)return $number;
    1249. return false;
    1250. }