php实现生产不重复的6位数字+2位字母
2016年4月21日
没有评论
最近要实现一个功能,用php生产一个8位不重复的编号(前2位是字母,后6位是数字),用了2套方案:
第一套是实现按数字增长,比如:
AA000000->AA000001->…->AA999999->AB000000->AB000001->…->YY999999
第二套是实现按字母增长后增长数字,比如:
AA000000->AB000000->…->AY000000->AA000001->AB000001->…->YY999999
方法1:
function getNewBindCode($oldCode){
if(empty($oldCode)){return 'AA000000';}
$old_en_1=substr($oldCode,0,1);
$old_en_2=substr($oldCode,1,1);
$old_shuzi=intval(substr($oldCode,2));
if($old_shuzi==999999){
$enToShuzi=array('A'=>1,'B'=>2,'C'=>3,'D'=>4,'E'=>5,'F'=>6,'G'=>7,'H'=>8,'J'=>9,'K'=>10,'L'=>11,'M'=>12,'N'=>13,'P'=>14,'Q'=>15,'R'=>16,'S'=>17,'T'=>18,'U'=>19,'V'=>20,'W'=>21,'X'=>22,'Y'=>23);
$old_en_1=$enToShuzi[$old_en_1];
$old_en_2=$enToShuzi[$old_en_2];
if($old_en_2==23){
$new_en_1=$old_en_1+1;
$new_en_2=1;
}
else {
$new_en_1=$old_en_1;
$new_en_2=$old_en_2+1;
}
$new_en=array_search($new_en_1,$enToShuzi).array_search($new_en_2,$enToShuzi);
$new_shuzi='000000';
}
else {
$new_en=$old_en_1.$old_en_2;
$new_shuzi=$old_shuzi+1;
}
switch(strlen($new_shuzi)){
case 1:$new_shuzi='00000'.$new_shuzi;break;
case 2:$new_shuzi='0000'.$new_shuzi;break;
case 3:$new_shuzi='000'.$new_shuzi;break;
case 4:$new_shuzi='00'.$new_shuzi;break;
case 5:$new_shuzi='0'.$new_shuzi;break;
}
return $new_en.$new_shuzi;
}
方法2:
function getNewBindCode($oldCode){
if(empty($oldCode)){return 'AA000000';}
$enToShuzi=array('A'=>1,'B'=>2,'C'=>3,'D'=>4,'E'=>5,'F'=>6,'G'=>7,'H'=>8,'J'=>9,'K'=>10,'L'=>11,'M'=>12,'N'=>13,'P'=>14,'Q'=>15,'R'=>16,'S'=>17,'T'=>18,'U'=>19,'V'=>20,'W'=>21,'X'=>22,'Y'=>23);
$old_en_1=$enToShuzi[substr($oldCode,0,1)];
$old_en_2=$enToShuzi[substr($oldCode,1,1)];
$old_shuzi=intval(substr($oldCode,2));
if($old_en_2==23){//是Y
if($old_shuzi==999999){
$new_en_1=$old_en_1+1;
$new_en_2=1;
$new_shuzi=0;
}
else {
$new_en_1=$old_en_1;
$new_en_2=1;
$new_shuzi=$old_shuzi+1;
}
}
else {
$new_en_1=$old_en_1;
$new_en_2=$old_en_2+1;
$new_shuzi=$old_shuzi;
}
switch(strlen($new_shuzi)){
case 1:$new_shuzi='00000'.$new_shuzi;break;
case 2:$new_shuzi='0000'.$new_shuzi;break;
case 3:$new_shuzi='000'.$new_shuzi;break;
case 4:$new_shuzi='00'.$new_shuzi;break;
case 5:$new_shuzi='0'.$new_shuzi;break;
}
$new_en=array_search($new_en_1,$enToShuzi).array_search($new_en_2,$enToShuzi);
return $new_en.$new_shuzi;
}
使用方法:
第一次:echo getNewBindCode(”);
第二次以后,用上次得到的传入参数,echo getNewBindCode($preCode);
近期评论