景湘 发表于 2021-5-19 11:26:19

求助这个怎么写代码优

传入一个号
例如: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: 为固定字母

范广庆 发表于 2021-5-21 20:34:28

没想到什么好办法,字符串截取吧

战魂小飞侠 发表于 2021-5-26 18:00:57

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 '';
}
只有裁开,计算,拼接了,当然替换也可以

雪在烧 发表于 2021-5-28 22:55:15

哈哈 我之前这样写的
$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]
查看完整版本: 求助这个怎么写代码优