求助这个怎么写代码优
传入一个号例如:CHNAA0000000001GT打印出这个号码的下一个号码CHNAA0000000002GT
例如:CHNBZ9999999999GT打印出这个号码的下一个号码CHNCA0000000001GT
新生成规则:CHN+2个字母+10数字+GT
CHN: 为固定字母
2个字母: 系统按顺序自动生成对应的2个字母编号,从AA开始
例如: AA,AB,AC.....AZ,BA,BB,....BZ,CA,CB.....依次类推
10位数字:从0000000001开始顺序递增至9999999999,当用完之后2字母变成AB,然后又重新0000000001开始至9999999999,依次类推。
GT: 为固定字母
没想到什么好办法,字符串截取吧 function getLastKey($key)
{
if (preg_match('/^CHN({2})(\d{10})GT$/', $key, $matches)) {
if ($matches == '9999999999') {
//这里需要自己处理一下,到ZZ了 下一个会是AAA,这里自己处理,你也没说咋个处理
$result = 'CHN' . (++$matches) . '0000000001' . 'GT';
} else {
$result = 'CHN' . $matches . str_pad($matches + 1, 10, 0, STR_PAD_LEFT) . 'GT';
}
return $result;
}
return '';
}
只有裁开,计算,拼接了,当然替换也可以 哈哈 我之前这样写的
$ae='SFCBZ9999999999YQ';//redis取出数字
$yongwanle=false;
$aejia=intval(substr($ae,5,10))+1;
if($aejia==10000000000){
$zimu=substr($ae,3,2);
$ii=701;
for ($i = 26; $i <= $ii; $i++) {
$y = ($i / 26);
$y = intval($y);
$jieguo=chr($y+64);
$jieguo.=chr($i-$y*26 + 65);
if($jieguo==$zimu){
$ii=$i+1;
}
if($i==701){
$yongwanle=true;
}
}
if($yongwanle){
die('号段用完了!');
}
var_dump(str_replace(substr($ae,3,12),$jieguo.'0000000001',$ae));
}else{
$aejia=str_pad($aejia,10,0,STR_PAD_LEFT);
var_dump(str_replace(substr($ae,5,10),$aejia,$ae));
}
页:
[1]