<?php/** * Created by PhpStorm. * User: zhangjianfeng * Date: 2018/11/23 * Time: 11:26:13 */date_default_timezone_set('asia/shanghai');define('C',[ 'dbhost'=>'120.78.91.214', 'dbuname'=>'root', 'dbpwd'=>'323846mysql', 'dbname'=>'gmctest', 'dbport'=>'3306', 'wsip'=>'0.0.0.0', 'wsport'=>'2000', 'wsport2'=>'2002', 'redisport'=>'6379', 'redisip'=>'127.0.0.1',]);//define('C',[// 'dbhost'=>'rm-j6c2sp878udjj5v1w.mysql.rds.aliyuncs.com',// 'dbuname'=>'bs_trade_userzjf',// 'dbpwd'=>'O9#d22Wex220X',// 'dbname'=>'gmdb',// 'dbport'=>'3306',// 'wsip'=>'0.0.0.0',// 'wsport'=>'2000',// 'wsport2'=>'2002',// 'redisport'=>'6379',// 'redisip'=>'127.0.0.1',////]);function red(){ $r=new Redis(); $r->pconnect(C['redisip'],C['redisport']); return $r;}function calc($n1,$t,$n2,$prec,$rtype){ switch($t){ case 1: if($rtype==-1){ return bcadd($n1,$n2,$prec); }else if($rtype==0){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); return bcdiv(round(bcmul(bcadd($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec); }else if($rtype==1){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); $add=bcadd($n1,$n2,64); $add2=bcadd($n1,$n2,$prec); if($add>$add2){ $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec); } return $add2; } break; case 2: if($rtype==-1){ return bcsub($n1,$n2,$prec); }else if($rtype==0){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); return bcdiv(round(bcmul(bcsub($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec); }else if($rtype==1){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); $add=bcsub($n1,$n2,64); $add2=bcsub($n1,$n2,$prec); if($add>$add2){ $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec); } return $add2; } break; case 3: if($rtype==-1){ return bcmul($n1,$n2,$prec); }else if($rtype==0){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); return bcdiv(round(bcmul(bcmul($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec); }else if($rtype==1){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); $add=bcmul($n1,$n2,64); $add2=bcmul($n1,$n2,$prec); if($add>$add2){ $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec); } return $add2; } break; case 4: if($n2==0)return 0; if($rtype==-1){ return bcdiv($n1,$n2,$prec); }else if($rtype==0){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); return bcdiv(round(bcmul(bcdiv($n1,$n2,$prec1),$dn,$prec1)),$dn,$prec); }else if($rtype==1){ $prec1=$prec+1; $dn=str_pad('1',$prec1,'0'); $add=bcdiv($n1,$n2,64); $add2=bcdiv($n1,$n2,$prec); if($add>$add2){ $add2=bcdiv(bcadd(bcmul($add2,$dn),1),$dn,$prec); } return $add2; } break; } return 0;}function tz($n){ return bcmul($n,100000000);}function tx($n){ return bcdiv($n,100000000,8);}//显示成正常数字,防止科学计数法function shownum($num){ $rnum=number_format($num,10,'.',''); $rnum=trim($rnum,'0'); if(substr($rnum,0,1)=='.')$rnum='0'.$rnum; if(substr($rnum,-1,1)=='.')$rnum=substr($rnum,0,-1); return $rnum;}//更新盘口数据function updatepk($r,$m,$price,$t){ $pendingkey=$m.'_'.$t; $oidkey=$m.'_link_'.$price; $oc=$r->llen($oidkey); echo '盘口映射订单:长度='.$oc; if($oc){ $oids=$r->lrange($oidkey, 0, $oc); $sum=0; foreach($oids as $k=>$v){ $tmpd=$r->hmget('order_'.$v,['status','last']);// status : 0/1/2 进行中/成交/撤单 echo 'get order data ='.json_encode($tmpd).PHP_EOL; if($tmpd['last']>0){ $sum=bcadd($sum,$tmpd['last']); }else{//如果没有剩余,有问题,则更新状态 if($tmpd['status']!=1){ $r->hset('order_'.$v, 'status', 1);//完全成交了,但是status不是1 } //从映射队列中移除 $r->lrem($m.'_link_'.$price, $v, 1);//完全成交,删除盘口价格订单映射 } } echo ' new count=|'.$sum.'| '.PHP_EOL; if($sum>0){ $d1=$r->zremrangebyscore($pendingkey, $price, $price); $d2=$r->zadd($pendingkey, $price, '['.$price.','.$sum.']');//挂上新数据 echo '删除旧盘口:'.$d1.'挂上新数据'.$d2.' price='.$price.PHP_EOL; return; } } $r->zremrangebyscore($pendingkey, $price, $price); echo '删除盘口==='.$price.PHP_EOL;}function getlasttimepoint(){ // 1m,5m, 15m,30m, 1h, 1day, 1week, 1month $span=[60,300,900,1800,3600,86400,604800,0]; $d=[]; foreach($span as $k=>$tspan){ switch($tspan){ case 60: //1m $n=strtotime(date('Y-m-d H:i',time()).':00');//1m // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*60; // } break; case 300: //5m $m=date('i',time()); $ms=floor($m/5)*5; $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00'); // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*300; // } break; case 900: //15m $m=date('i',time()); $ms=floor($m/15)*15; $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00'); // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*900; // } break; case 1800: //30m $m=date('i',time()); $ms=floor($m/30)*30; $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00'); // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*1800; // } break; case 3600: //1h $m=date('i',time()); $ms=floor($m/60)*60; $n=strtotime(date('Y-m-d H',time()).':'.$ms.':00'); // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*3600; // } break; case 86400: //1d $n=strtotime(date('Y-m-d',time()).' 00:00:00'); // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*86400; // } break; case 604800: //1 week $now=strtotime(date('Y-m-d',time()).' 00:00:00'); $w=date('w',time()); if($w==0)$w=7; $n=$now-($w-1)*604800; // for($i=1;$i<=$linecount;$i++){ // $timepoint[]=$n-($i-1)*604800; // } break; case 0: $m=date('Y-m').'-1 00:00:00'; $n=strtotime($m); //$timepoint[]=strtotime($m); // for($i=2;$i<=$linecount;$i++){ // $timepoint[]=strtotime("$m ".(-1*($i-1))." months"); // } break; } $d[]=[$tspan,$n]; } return $d;}//更新K线数据 redis eth_btc 0 0function updatek($r,$m,$p,$a){ logs('更新K线数据:'.$m.' price='.$p.' $a='.$a); $ts=getlasttimepoint(); foreach($ts as $k=>$v){ $tspan=$v[0]; $ts=$v[1]; $kkey='k_'.$m.'_'.$tspan; $d=$r->zrangebyscore($kkey, $ts, $ts); //[123339930,155,5,7,4,2] //timestamp,amount,sp,hp,mp,ep if(empty($d)||count($d)==0||empty($d[0])){ if($a==0&&$p==0){//没有成交 $zlen=$r->zcard($kkey); $zlen=$zlen-1; if($zlen>=0){ for($i=$zlen;$i>=0;$i--){ $refd=$r->zrange($kkey, $i, $i); if(empty($refd)||count($refd)==0)break; $refarr=json_decode($refd[0],true); if(!empty($refarr[5])){ $p=$refarr[5]; break; } } if($p>0){ $json='['.$ts.','.$a.','.$p.','.$p.','.$p.','.$p.']'; $r->zadd($kkey, $ts, $json); } } }else{ $json='['.$ts.','.$a.','.$p.','.$p.','.$p.','.$p.']'; $r->zadd($kkey, $ts, $json); } }else{ if($p>0 && $a>0){ $darr=json_decode($d[0],true); $darr[5]=$p; if($darr[1]==0){ $darr[1]=$a; $darr[2]=$p; $darr[3]=$p; $darr[4]=$p; }else{ $darr[1]=bcadd($a,$darr[1]); if($darr[3]<$p){ $darr[3]=$p; }else if($darr[4]>$p){ $darr[4]=$p; } } $r->zremrangebyscore($kkey, $ts, $ts); $r->zadd($kkey, $ts, json_encode($darr)); } } $zlen2=$r->zcard($kkey); $maxlen=300; if($zlen2>$maxlen){ $r->zRemRangeByRank($kkey, 0, $zlen2-$maxlen-1); $zlen2=$maxlen; } }}function wsql($r,$type,$p){ logs('创建SQL语句:'.$type.',params='.json_encode($p)); $sql=''; switch($type){ case 'updateuseramount': //p=[amount=>11||amountd=>23,userid=>10005,coin=eth] $fd1=''; $fd2=''; if(!empty($p['amount'])){ $fd1='amount='.bcdiv($p['amount'],100000000,8); } if(!empty($p['amountd'])){ $fd2='amountd='.bcdiv($p['amountd'],100000000,8); } $fd=''; if(!empty($fd1)&&!empty($fd2)){ $fd=$fd1.','.$fd2; }else{ $fd=$fd1.$fd2; } if(!empty($fd)){ $sql='update usercoin set '.$fd.' where userid='.$p['userid'].' and coin=\''.$p['coin'].'\''; } break; case 'addorder': //p=['orderid','userid','m','p','amount','deal','t','status'] $p['a']=bcdiv($p['a'],100000000,8); $p['deal']=bcdiv($p['deal'],100000000,8); $isapi=!empty($p['isapi'])?1:0; $sql='insert into movesay_trade(id,userid,market,price,num,deal,type,addtime,status,isapi)values('; $sql.=$p['orderid'].','.$p['userid'].',\''.$p['m'].'\','.$p['p'].','.$p['a'].','.$p['deal'].','.$p['t'].','.time().','.$p['status'].','.$isapi.')'; break; case 'updateorder': //p=['orderid','field'=>[???]] $upstr=''; if(!empty($p['field']['deal']))$p['field']['deal']=bcdiv($p['field']['deal'],100000000,8); foreach($p['field'] as $k=>$v){ $upstr.=$k.'='.$v.','; } $upstr.='id='.$p['orderid']; $sql='update movesay_trade set '.$upstr.' where id='.$p['orderid']; break; case 'addtrade': //p=['userid','touserid','m','p','amount','fee','t','bid','sid'] $p['amount']=bcdiv($p['amount'],100000000,8); $sql='insert into movesay_trade_log(userid,peerid,market,price,num,fee_buy,fee_sell,type,addtime,buy_id,sell_id)values('; $sql.=$p['userid'].','.$p['touserid'].',\''.$p['m'].'\','.$p['p'].','.$p['amount'].','.$p['fee_buy'].','.$p['fee_sell'].','.$p['t'].','.time().','.$p['bid'].','.$p['sid'].')'; break; } if(!empty($sql))$r->lpush('lsql',$sql);}function getuidbypubkey($r,$pubkey){ return $r->get('public_key_'.$pubkey);}function decimallen($n){ $pp=strpos($n.'','.'); if(!$pp)return 0; $plen=strlen($n.'')-$pp-1; return $plen;}function isnum($n){ return preg_match('/^[0-9]+(.[0-9]+)?$/', $n);}// 获取根据身份证取省市function get_province_city( $cardnumber ) { $top_four = substr( strval( $cardnumber ), 0, 4 ); $province_cities = [ '1100' => '北京市', '1101' => '北京市', '1102' => '北京市', '1200' => '天津市', '1201' => '天津市', '1202' => '天津市', '1300' => '', '1301' => '石家庄市', '1302' => '唐山市', '1303' => '秦皇岛市', '1304' => '邯郸市邯郸市', '1305' => '邢台市', '1306' => '保定市', '1307' => '张家口市', '1308' => '承德市', '1309' => '沧州市', '1310' => '廊坊市', '1311' => '衡水市', '1400' => '', '1401' => '太原市', '1402' => '大同市', '1403' => '阳泉市', '1404' => '长治市', '1405' => '晋城市', '1406' => '朔州市', '1422' => '忻州市', '1423' => '吕梁市', '1424' => '晋中市', '1426' => '临汾市', '1427' => '运城市', '1500' => '', '1501' => '呼和浩特市', '1502' => '包头市', '1503' => '乌海市', '1504' => '赤峰市', '1521' => '呼伦贝尔市', '1522' => '兴安盟',// '1523' => '哲里木盟', // 通辽市 '1523' => '通辽市', // 通辽市 '1525' => '锡林郭勒盟', '1526' => '乌兰察布市',// '1527' => '伊克昭盟', // 鄂尔多斯市 '1527' => '鄂尔多斯市', // 鄂尔多斯市 '1528' => '巴彦淖尔市', '1529' => '阿拉善盟', '2100' => '', '2101' => '沈阳市', '2102' => '大连市', '2103' => '鞍山市', '2104' => '抚顺市', '2105' => '本溪市', '2106' => '丹东市', '2107' => '锦州市', '2108' => '营口市', '2109' => '阜新市', '2110' => '辽阳市', '2111' => '盘锦市', '2112' => '铁岭市', '2113' => '朝阳市', '2114' => '葫芦岛市', '2200' => '', '2201' => '长春市', '2202' => '吉林市', '2203' => '四平市', '2204' => '辽源市', '2205' => '通化市', '2206' => '白山市', '2207' => '松原市', '2208' => '白城市', '2224' => '延边朝鲜族自治州', '2300' => '', '2301' => '哈尔滨市', '2302' => '齐齐哈尔市', '2303' => '鸡西市', '2304' => '鹤岗市', '2305' => '双鸭山市', '2306' => '大庆市', '2307' => '伊春市', '2308' => '佳木斯市', '2309' => '七台河市', '2310' => '牡丹江市', '2311' => '黑河市', '2323' => '绥化市', '2327' => '大兴安岭地区', '3100' => '上海市', '3101' => '上海市', '3102' => '上海市', '3200' => '', '3201' => '南京市', '3202' => '无锡市', '3203' => '徐州市', '3204' => '常州市', '3205' => '苏州市', '3206' => '南通市', '3207' => '连云港市', '3208' => '淮阴市', '3209' => '盐城市', '3210' => '扬州市', '3211' => '镇江市', '3212' => '泰州市', '3213' => '宿迁市', '3300' => '', '3301' => '杭州市', '3302' => '宁波市', '3303' => '温州市', '3304' => '嘉兴市', '3305' => '湖州市', '3306' => '绍兴市', '3307' => '金华市', '3308' => '衢州市', '3309' => '舟山市', '3310' => '台州市', '3325' => '丽水市', '3400' => '', '3401' => '合肥市', '3402' => '芜湖市', '3403' => '蚌埠市', '3404' => '淮南市', '3405' => '马鞍山市', '3406' => '淮北市', '3407' => '铜陵市', '3408' => '安庆市', '3410' => '黄山市', '3411' => '滁州市', '3412' => '阜阳市', '3413' => '宿州市', '3424' => '六安市', '3425' => '宣城市', '3426' => '巢湖地区', '3429' => '池州市', '3500' => '', '3501' => '福州市', '3502' => '厦门市', '3503' => '莆田市', '3504' => '三明市', '3505' => '泉州市', '3506' => '漳州市', '3507' => '南平市', '3508' => '龙岩市', '3522' => '宁德市', '3600' => '', '3601' => '南昌市', '3602' => '景德镇市', '3603' => '萍乡市', '3604' => '九江市', '3605' => '新余市', '3606' => '鹰潭市', '3607' => '赣州市', '3622' => '宜春市', '3623' => '上饶市', '3624' => '吉安市', '3625' => '抚州市', '3700' => '', '3701' => '济南市', '3702' => '青岛市', '3703' => '淄博市', '3704' => '枣庄市', '3705' => '东营市', '3706' => '烟台市', '3707' => '潍坊市', '3708' => '济宁市', '3709' => '泰安市', '3710' => '威海市', '3711' => '日照市', '3712' => '莱芜市', '3713' => '临沂市', '3714' => '德州市', '3715' => '聊城市', '3723' => '滨州市', '3729' => '菏泽市', '4100' => '', '4101' => '郑州市', '4102' => '开封市', '4103' => '洛阳市', '4104' => '平顶山市', '4105' => '安阳市', '4106' => '鹤壁市', '4107' => '新乡市', '4108' => '焦作市', '4109' => '濮阳市', '4110' => '许昌市', '4111' => '漯河市', '4112' => '三门峡市', '4113' => '南阳市', '4114' => '商丘市', '4115' => '信阳市', '4127' => '周口市', '4128' => '驻马店市', '4200' => '', '4201' => '武汉市', '4202' => '黄石市', '4203' => '十堰市', '4205' => '宜昌市', '4206' => '襄樊市', '4207' => '鄂州市', '4208' => '荆门市', '4209' => '孝感市', '4210' => '荆州市', '4211' => '黄冈市', '4212' => '咸宁市', '4228' => '恩施土家族苗族自治州',// '4290' => '省直辖县级行政单位', '4290' => ['随州市', '潜江市', '天门市','神农架林区',], '4300' => '', '4301' => '长沙市', '4302' => '株洲市', '4303' => '湘潭市', '4304' => '衡阳市', '4305' => '邵阳市', '4306' => '岳阳市', '4307' => '常德市', '4308' => '张家界市', '4309' => '益阳市', '4310' => '郴州市', '4311' => '永州市', '4312' => '怀化市', '4325' => '娄底市', '4330' => '怀化市', '4331' => '湘西土家族苗族自治州', '4400' => '', '4401' => '广州市',// '4401' => '广州市市辖区',// '4401' => '广州市东山区',// '4401' => '广州市荔湾区',// '4401' => '广州市越秀区',// '4401' => '广州市海珠区',// '4401' => '广州市天河区',// '4401' => '广州市芳村区',// '4401' => '广州市白云区',// '4401' => '广州市黄埔区',// '4401' => '广州市番禺市',// '4401' => '广州市花都市',// '4401' => '广州市增城市',// '4401' => '广州市从化市', '4402' => '韶关市', '4403' => '深圳市', '4404' => '珠海市', '4405' => '汕头市', '4406' => '佛山市', '4407' => '江门市', '4408' => '湛江市', '4409' => '茂名市', '4412' => '肇庆市', '4413' => '惠州市', '4414' => '梅州市', '4415' => '汕尾市', '4416' => '河源市', '4417' => '阳江市', '4418' => '清远市', '4419' => '东莞市',// '4419' => '东莞市市辖区', '4420' => '中山市', '4425' => '东莞市',// '4420' => '中山市市辖区', '4451' => '潮州市', '4452' => '揭阳市', '4453' => '云浮市', '4500' => '', '4501' => '南宁市', '4502' => '柳州市', '4503' => '桂林市', '4504' => '梧州市', '4505' => '北海市', '4506' => '防城港市', '4507' => '钦州市', '4508' => '贵港市', '4509' => '玉林市', '4521' => '南宁市', '4522' => '柳州市', '4524' => '贺州市', '4526' => '百色市', '4527' => '河池市', '4600' => '儋州市', '4601' => '海口市', '4602' => '三亚市', '5000' => '重庆市', '5001' => ['万州区及周边区县', '涪陵区及周边区县'], '5002' => '重庆市', '5003' => '重庆市', '5100' => '', '5101' => '成都市', '5103' => '自贡市', '5104' => '攀枝花市', '5105' => '泸州市', '5106' => '德阳市', '5107' => '绵阳市', '5108' => '广元市', '5109' => '遂宁市', '5110' => '内江市', '5111' => '乐山市', '5113' => '南充市', '5115' => '宜宾市', '5116' => '广安市', '5130' => '达州市', '5131' => '雅安市', '5132' => '阿坝藏族羌族自治州', '5133' => '甘孜藏族自治州', '5134' => '凉山彝族自治州', '5137' => '巴中市', '5138' => '眉山市', '5139' => '资阳市', '5200' => '贵州省', '5201' => '贵阳市', '5202' => '六盘水市', '5203' => '遵义市', '5222' => '铜仁地区', '5223' => '黔西南布依族苗族自治州', '5224' => '毕节市', '5225' => '安顺市', '5226' => '黔东南苗族侗族自治州', '5227' => '黔南布依族苗族自治州', '5300' => '', '5301' => '昆明市', '5303' => '曲靖市', '5304' => '玉溪市', '5321' => '昭通市', '5323' => '楚雄彝族自治州', '5325' => '红河哈尼族彝族自治州', '5326' => '文山壮族苗族自治州', '5327' => '普洱市', '5328' => '西双版纳傣族自治州', '5329' => '大理白族自治州', '5330' => '保山市', '5331' => '德宏傣族景颇族自治州', '5332' => '丽江市', '5333' => '怒江傈僳族自治州', '5334' => '迪庆藏族自治州', '5335' => '临沧市', '5400' => '', '5401' => '拉萨市', '5421' => '昌都市', '5422' => '山南地区', '5423' => '日喀则市', '5424' => '那曲地区', '5425' => '阿里地区', '5426' => '林芝地区', '6100' => '', '6101' => '西安市', '6102' => '铜川市', '6103' => '宝鸡市', '6104' => '咸阳市', '6105' => '渭南市', '6106' => '延安市', '6107' => '汉中市', '6124' => '安康市', '6125' => '商洛市', '6127' => '榆林市', '6200' => '', '6201' => '兰州市', '6202' => '嘉峪关市', '6203' => '金昌市', '6204' => '白银市', '6205' => '天水市', '6221' => '酒泉市', '6222' => '张掖市', '6223' => '武威市', '6224' => '定西市', '6226' => '陇南市', '6227' => '平凉市', '6228' => '庆阳市', '6229' => '临夏回族自治州', '6230' => '甘南藏族自治州', '6300' => '', '6301' => '西宁市', '6321' => '海东市', '6322' => '海北藏族自治州', '6323' => '黄南藏族自治州', '6325' => '海南藏族自治州', '6326' => '果洛藏族自治州', '6327' => '玉树藏族自治州', '6400' => '', '6401' => '银川市', '6402' => '石嘴山市', '6403' => '吴忠市', '6422' => '固原市', '6500' => '', '6501' => '乌鲁木齐市', '6502' => '克拉玛依市', '6521' => '吐鲁番地区', '6522' => '哈密地区', '6523' => '昌吉回族自治州', '6527' => '博尔塔拉蒙古自治州', '6528' => '巴音郭楞蒙古自治州', '6529' => '阿克苏地区', '6530' => '克孜勒苏柯尔克孜自治州', '6531' => '喀什地区', '6532' => '和田地区', '6540' => '伊犁哈萨克自治州', '6541' => '奎屯市', '6542' => '塔城地区', '6543' => '阿勒泰地区',// '6590' => '直辖县级行政单位', '6590' => '石河子市', ]; if (!isset($province_cities[ $top_four ]) || empty($province_cities[ $top_four ]) ) { return "广州市"; } // 值为数据 随机一个value if ( is_array( $province_cities[ $top_four ] ) ) { $k = array_rand( $province_cities[ $top_four ], 1 ); return $province_cities[ $top_four ][ $k ]; } return $province_cities[ $top_four ];}// 根据省市获取车牌function get_plate_by_city($city) { global $db; $play_city = [ '云A' => '昆明市', '云C' => '昭通市', '云D' => '曲靖市', '云E' => '楚雄彝族自治州', '云F' => '玉溪市', '云G' => '红河哈尼族彝族自治州', '云H' => '文山壮族苗族自治州', '云J' => '普洱市', '云K' => '西双版纳傣族自治州', '云L' => '大理白族自治州', '云M' => '保山市', '云N' => '德宏傣族景颇族自治州', '云P' => '丽江市', '云Q' => '怒江傈僳族自治州', '云R' => '迪庆藏族自治州', '云S' => '临沧市', '云V' => '昆明市东川区', '京A' => '北京市', '京B' => '北京市出租汽车', '京C' => '北京市', '京D' => '暂未发放', '京E' => '北京市', '京F' => '北京市', '京G' => '北京市郊区县', '京H' => '北京市', '京J' => '北京市', '京K' => '北京市', '京L' => '北京市', '京M' => '北京市', '京N' => '北京市', '京P' => '北京市', '京Q' => '北京市', '冀A' => '石家庄市', '冀B' => '唐山市', '冀C' => '秦皇岛市', '冀D' => '邯郸市', '冀E' => '邢台市', '冀F' => '保定市', '冀G' => '张家口市', '冀H' => '承德市', '冀J' => '沧州市', '冀R' => '廊坊市', '冀T' => '衡水市', '吉A' => '长春市', '吉B' => '吉林市', '吉C' => '四平市', '吉D' => '辽源市', '吉E' => '通化市', '吉F' => '白山市', '吉G' => '白城市', '吉H' => '延边朝鲜族自治州', '吉J' => '松原市', '吉K' => '长白山管委会', '宁A' => '银川市', '宁B' => '石嘴山市', '宁C' => '吴忠市', '宁D' => '固原市', '宁E' => '中卫市', '川A' => '成都市', '川B' => '绵阳市', '川C' => '自贡市', '川D' => '攀枝花市', '川E' => '泸州市', '川F' => '德阳市', '川G' => '成都市', '川H' => '广元市', '川J' => '遂宁市', '川K' => '内江市', '川L' => '乐山市', '川M' => '资阳市', '川Q' => '宜宾市', '川R' => '南充市', '川S' => '达州市', '川T' => '雅安市', '川U' => '阿坝藏族羌族自治州', '川V' => '甘孜藏族自治州', '川W' => '凉山彝族自治州', '川X' => '广安市', '川Y' => '巴中市', '川Z' => '眉山市', '新A' => '乌鲁木齐市', '新B' => '昌吉回族自治州', '新C' => '石河子市', '新D' => '奎屯市', '新E' => '博尔塔拉蒙古自治州', '新F' => '伊犁哈萨克自治州', '新G' => '塔城地区', '新H' => '阿勒泰地区', '新J' => '克拉玛依市', '新K' => '吐鲁番地区', '新L' => '哈密地区', '新M' => '巴音郭楞蒙古自治州', '新N' => '阿克苏地区', '新P' => '克孜勒苏柯尔克孜自治州', '新Q' => '喀什地区', '新R' => '和田地区', '晋A' => '太原市', '晋B' => '大同市', '晋C' => '阳泉市', '晋D' => '长治市', '晋E' => '晋城市', '晋F' => '朔州市', '晋H' => '忻州市', '晋J' => '吕梁市', '晋K' => '晋中市', '晋L' => '临汾市', '晋M' => '运城市', '桂A' => '南宁市', '桂B' => '柳州市', '桂C' => '桂林市', '桂D' => '梧州市', '桂E' => '北海市', '桂F' => '崇左市', '桂G' => '来宾市', '桂H' => '桂林市下辖县', '桂J' => '贺州市', '桂K' => '玉林市', '桂L' => '百色市', '桂M' => '河池市', '桂N' => '钦州市', '桂P' => '防城港市', '桂R' => '贵港市', '沪A' => '上海市', '沪B' => '上海市', '沪C' => '上海市', '沪D' => '上海市', '沪E' => '上海市', '沪G' => '上海市', '沪H' => '上海市', '沪J' => '上海市', '沪K' => '上海市', '沪L' => '上海市', '沪M' => '上海市', '沪N' => '上海市', '津A' => '天津市', '津B' => '天津市', '津C' => '天津市', '津D' => '天津市', '津E' => '天津市出租汽车', '津F' => '天津市', '津G' => '天津市', '津H' => '天津市', '津J' => '天津市', '津K' => '天津市', '津L' => '天津市', '津M' => '天津市', '津N' => '天津市', '津Q' => '天津市', '津R' => '天津市', '浙A' => '杭州市', '浙B' => '宁波市', '浙C' => '温州市', '浙D' => '绍兴市', '浙E' => '湖州市', '浙F' => '嘉兴市', '浙G' => '金华市', '浙H' => '衢州市', '浙J' => '台州市', '浙K' => '丽水市', '浙L' => '舟山市', '渝A' => '重庆市', '渝B' => '重庆市', '渝C' => '重庆近郊区县', '渝F' => '万州区及周边区县', '渝G' => '涪陵区及周边区县', '渝H' => '黔江区及周边区县', '湘A' => '长沙市', '湘B' => '株洲市', '湘C' => '湘潭市', '湘D' => '衡阳市', '湘E' => '邵阳市', '湘F' => '岳阳市', '湘G' => '张家界市', '湘H' => '益阳市', '湘J' => '常德市', '湘K' => '娄底市', '湘L' => '郴州市', '湘M' => '永州市', '湘N' => '怀化市', '湘S' => '省直系统', '湘U' => '湘西土家族苗族自治州', '琼A' => '海口市', '琼B' => '三亚市', '琼E' => '洋浦开发区', '琼F' => '儋州市', '甘A' => '兰州市', '甘B' => '嘉峪关市', '甘C' => '金昌市', '甘D' => '白银市', '甘E' => '天水市', '甘F' => '酒泉市', '甘G' => '张掖市', '甘H' => '武威市', '甘J' => '定西市', '甘K' => '陇南市', '甘L' => '平凉市', '甘M' => '庆阳市', '甘N' => '临夏回族自治州', '甘P' => '甘南藏族自治州', '皖A' => '合肥市', '皖B' => '芜湖市', '皖C' => '蚌埠市', '皖D' => '淮南市', '皖E' => '马鞍山市', '皖F' => '淮北市', '皖G' => '铜陵市', '皖H' => '安庆市', '皖J' => '黄山市', '皖K' => '阜阳市', '皖L' => '宿州市', '皖M' => '滁州市', '皖N' => '六安市', '皖P' => '宣城市', '皖R' => '池州市', '皖S' => '毫州市', '粤A' => '广州市', '粤B' => '深圳市', '粤C' => '珠海市', '粤D' => '汕头市', '粤E' => '佛山市', '粤F' => '韶关市', '粤G' => '湛江市', '粤H' => '肇庆市', '粤J' => '江门市', '粤K' => '茂名市', '粤L' => '惠州市', '粤M' => '梅州市', '粤N' => '汕尾市', '粤P' => '河源市', '粤Q' => '阳江市', '粤R' => '清远市', '粤S' => '东莞市', '粤T' => '中山市', '粤U' => '潮州市', '粤V' => '揭阳市', '粤W' => '云浮市', '粤X' => '佛山市顺德区', '粤Y' => '佛山市南海区', '粤Z' => '港澳', '苏A' => '南京市', '苏B' => '无锡市', '苏C' => '徐州市', '苏D' => '常州市', '苏E' => '苏州市', '苏F' => '南通市', '苏G' => '连云港市', '苏H' => '淮安市', '苏J' => '盐城市', '苏K' => '扬州市', '苏L' => '镇江市', '苏M' => '泰州市', '苏N' => '宿迁市', '蒙A' => '呼和浩特市', '蒙B' => '包头市', '蒙C' => '乌海市', '蒙D' => '赤峰市', '蒙E' => '呼伦贝尔市', '蒙F' => '兴安盟', '蒙G' => '通辽市', '蒙H' => '锡林郭勒盟', '蒙J' => '乌兰察布市', '蒙K' => '鄂尔多斯市', '蒙L' => '巴彦淖尔市', '蒙M' => '阿拉善盟', '藏A' => '拉萨市', '藏B' => '昌都市', '藏C' => '山南地区', '藏D' => '日喀则市', '藏E' => '那曲地区', '藏F' => '阿里地区', '藏G' => '林芝地区', '藏H' => '驻四川省天全县车辆管理所', '藏J' => '驻青海省格尔木市车辆管理所', '豫A' => '郑州市', '豫B' => '开封市', '豫C' => '洛阳市', '豫D' => '平顶山市', '豫E' => '安阳市', '豫F' => '鹤壁市', '豫G' => '新乡市', '豫H' => '焦作市', '豫J' => '濮阳市', '豫K' => '许昌市', '豫L' => '漯河市', '豫M' => '三门峡市', '豫N' => '商丘市', '豫P' => '周口市', '豫Q' => '驻马店市', '豫R' => '南阳市', '豫S' => '信阳市', '豫U' => '济源市', '贵A' => '贵阳市', '贵B' => '六盘水市', '贵C' => '遵义市', '贵D' => '铜仁市', '贵E' => '黔西南布依族苗族自治州', '贵F' => '毕节市', '贵G' => '安顺市', '贵H' => '黔东南苗族侗族自治州', '贵J' => '黔南布依族苗族自治州', '赣A' => '南昌市', '赣B' => '赣州市', '赣C' => '宜春市', '赣D' => '吉安市', '赣E' => '上饶市', '赣F' => '抚州市', '赣G' => '九江市', '赣H' => '景德镇市', '赣J' => '萍乡市', '赣K' => '新余市', '赣L' => '鹰潭市', '赣M' => '南昌市', '辽A' => '沈阳市', '辽B' => '大连市', '辽C' => '鞍山市', '辽D' => '抚顺市', '辽E' => '本溪市', '辽F' => '丹东市', '辽G' => '锦州市', '辽H' => '营口市', '辽J' => '阜新市', '辽K' => '辽阳市', '辽L' => '盘锦市', '辽M' => '铁岭市', '辽N' => '朝阳市', '辽P' => '葫芦岛市', '鄂A' => '武汉市', '鄂B' => '黄石市', '鄂C' => '十堰市', '鄂D' => '荆州市', '鄂E' => '宜昌市', '鄂F' => '襄阳市', '鄂G' => '鄂州市', '鄂H' => '荆门市', '鄂J' => '黄冈市', '鄂K' => '孝感市', '鄂L' => '咸宁市', '鄂M' => '仙桃市', '鄂N' => '潜江市', '鄂P' => '神农架林区', '鄂Q' => '恩施土家族苗族自治州', '鄂R' => '天门市', '鄂S' => '随州市', '闽A' => '福州市', '闽B' => '莆田市', '闽C' => '泉州市', '闽D' => '厦门市', '闽E' => '漳州市', '闽F' => '龙岩市', '闽G' => '三明市', '闽H' => '南平市', '闽J' => '宁德市', '闽K' => '平潭综合实验区', '陕A' => '西安市', '陕B' => '铜川市', '陕C' => '宝鸡市', '陕D' => '咸阳市', '陕E' => '渭南市', '陕F' => '汉中市', '陕G' => '安康市', '陕H' => '商洛市', '陕J' => '延安市', '陕K' => '榆林市', '陕V' => '杨陵农业示范区', '青A' => '西宁市', '青B' => '海东市', '青C' => '海北藏族自治州', '青D' => '黄南藏族自治州', '青E' => '海南藏族自治州', '青F' => '果洛藏族自治州', '青G' => '玉树藏族自治州', '青H' => '海西蒙古族藏族自治州', '鲁A' => '济南市', '鲁B' => '青岛市', '鲁C' => '淄博市', '鲁D' => '枣庄市', '鲁E' => '东营市', '鲁F' => '烟台市', '鲁G' => '潍坊市', '鲁H' => '济宁市', '鲁J' => '泰安市', '鲁K' => '威海市', '鲁L' => '日照市', '鲁M' => '滨州市', '鲁N' => '德州市', '鲁P' => '聊城市', '鲁Q' => '临沂市', '鲁R' => '菏泽市', '鲁S' => '莱芜市', '鲁U' => '青岛市增补', '鲁V' => '潍坊市增补', '鲁W' => '省直系统', '鲁Y' => '烟台市增补', '黑A' => '哈尔滨市', '黑B' => '齐齐哈尔市', '黑C' => '牡丹江市', '黑D' => '佳木斯市', '黑E' => '大庆市', '黑F' => '伊春市', '黑G' => '鸡西市', '黑H' => '鹤岗市', '黑J' => '双鸭山市', '黑K' => '七台河市', '黑L' => '哈尔滨市', '黑M' => '绥化市', '黑N' => '黑河市', '黑P' => '大兴安岭地区', '黑R' => '农垦系统', ]; $city_short = array_search($city, shuffle_assoc($play_city)); if (!$city_short) { $city_short = "粤A"; } $numbers = generate_random_numbers(); $flag = false; for ($i=0; $i<50; ++$i) { $numbers = generate_random_numbers(); $plate = $city_short . $numbers; // 车牌 // 查出当前城市是否已存在牌照数字 $sql = "select count(*) counts from user_items where plate='$plate'"; $row = $db->query($sql); if (!$row) { $flag = true; break; } if (!$row[0]['counts']) { $flag = true; break; } } if (!$flag) { return false; } return $city_short . $numbers;}// 随机数组元素function shuffle_assoc($array){ // Initialize $shuffled_array = array(); // Get array's keys and shuffle them. $shuffled_keys = array_keys($array); shuffle($shuffled_keys); // Create same array, but in shuffled order. foreach ( $shuffled_keys AS $shuffled_key ) { $shuffled_array[ $shuffled_key ] = $array[ $shuffled_key ]; } // foreach // Return return $shuffled_array;}// 5位随机数字 最多3位连续一样的数字//function generate_random_numbers($exit_numbers){// $array = range(00000, 99999);// foreach ($array as $k=>$v) {// // 过滤已发的牌照// if (in_array($v ,$exit_numbers)) {// $key2 = array_search($v, $array);// unset($array[$key2]);// }// // 过滤最多3次重复数字// if (preg_match("/(\d)\\1{3,}/",$v)) {// $key = array_search($v, $array);// unset($array[$key]);// }// }// shuffle($array);// return isset($array[0]) ? sprintf("%'.05d", $array[0]) : 0;//}function generate_random_numbers(){ $ns=['0','1','2','3','4','5','7','9']; $number=''; $len=5; for($i=0;$i<$len;$i++){ if(count($ns)==0)break; $index=rand(0,count($ns)-1); $number.=$ns[$index]; unset($ns[$index]); $ns=array_values($ns); } if(strlen($number)==$len)return $number; return false;}