如何制作5位数字数字顺序字符串

时间:2014-04-30 10:59:06

标签: php logic

我可以获得逻辑来制作5位数字数字连续字符串。

如果数字在00001-99999之间,我们可以显示相同的数字,但是当达到99999时,它应该显示A00001而不是100000.同样在A9999之后它应该是B0001。

你有任何逻辑吗?

5 个答案:

答案 0 :(得分:2)

也许像这样将输入字符串转换为基数10([0-9]),将值增加1,转换回基数36([a-z0-9])并返回新值。对于小于10000的数值,它还将值填充为5个字符。

function do_the_thing($string){
    return str_pad(base_convert(base_convert($string,36,10)+1,10,36),5,0,STR_PAD_LEFT);
}

使用

进行测试
echo do_the_thing('a0000');

返回'a0001'。

测试后的一些结果:

99999 -> 9999a
a9999 -> a999a
zzzzz -> 100000

不是100%你正在寻找但非常接近。

答案 1 :(得分:1)

我认为这就是你所要求的

$input  = '10099999'; 

$i=0;
while($input >= 100000)
{

$input = $input - 100000;
$i++;

}

if($i < 1)
{
echo $input;
}
else
{

     if($i >26)
     {
         $letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
         $k="";
         $j=0;

         while($i > 26)
         {
            $i=$i-26;
            $j++;
         }

         for($l=0;$l<$j;$l++)
         {
             $k=$k."".$letters[25];
         }

         if($input == 0)
            $input = "0000";
         $input2="";
         for($l=$i;$l>$i;$l--)
         {

             if($input >= (9999/(pow(10,$j))))
                $input = $input / 10;

         }

         $kt=$k."".$letters[$i]."".$input;


         echo "".($k)."".$letters[$i]."".floor($input/pow(10,$j));

     }
     else
     {
       $s="";

       $letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
       if($input == 0)
       {
          echo $letters[$i-1]."0000";
       }
       else
       {
          echo $letters[$i-1]."".$input;
       }
     }

}

Demo

答案 2 :(得分:0)

我假设你的兴趣是得到一系列的数字,从0到ZZZZZ并且你不关心所描述的顺序,你实际上可以使用36来作为你的数字。

您可以使用PHP自己的base_convert方法,该方法允许base最多36个,并且如果它达到数字范围以表示您的值,则使用a-z。

例如,做this

<?php
$number = '12332';
echo base_convert($number, 10, 36);

这会将9ik作为值。

你可以使用简单的整数并增加它们,然后使用base_convert获得你想要的序列号。

所以就这样做:

$input  = 'a053'; // your alphanumeric input number
$base10 = intval(base_convert($input, 36, 10)); // converted to base10
$base10++; // increase number
$output = base_convert($base10, 10, 36); // convert back to alphanumerical

我会为你整理function

<?php
/**
 * increases given base36 number $current and returns it as base 36 
 */
function giveMyNumber($current = 0) {
  $base36 = '00000';
  if($current > 0) {
    $base10 = base_convert($current, 36, 10);
    $base10++;
    if($base > 60466175) {
      throw new \Exception('Maximum reached!');
    }
    $base36 = base_convert($base10, 10, 36);
  }

  return $base36;
}

echo giveMyNumber('45Z');

答案 3 :(得分:-1)

function seq4($input){

        $i=0;$var = 'A';

        $max_lenght     =  5;       $length         =  strlen($input);
                if($length>$max_lenght){            while($input >= 10000){
                $input = $input - 10000;                
                $i++;           }

            $i=$i-9;
                        while($i > 1){                 
                $i--;         
                $var++.'';
             }

             $bal_lenght    = $max_lenght - ($str_lenght = strlen($var));  
             $string        = $var.str_pad($input, $bal_lenght, "0", STR_PAD_LEFT);
             $string_lenght = strlen($string);
             return ($string_lenght>$max_lenght)?false:$string;                             } else {
             return str_pad($input, 5, "0", STR_PAD_LEFT);      }   }

答案 4 :(得分:-2)

这应该有效:

function gencode($prefix='A',$s = '00000000', $n){
    return $prefix.substr($s,0, strlen($s) - strlen($n)).$n;
}

如果n是您的(last +1)项,只需要进行一些更改,例如验证$s上的长度,将$n更改为0,并将前缀改为&#39; B&# 39;