2011-12-13 68 views
1

我要生成的字母数字唯一的数字,但格式应该是这样的生成的字母数字的唯一编号

是AB001到AB999 .... BA001与ZZ999 BA999结束后,应该是从AA001开始AA999。如果我给输入是

1 = result AA001 
999 = result AA999 
1000 = result AB001 

任何人都可以帮助吗?

+1

不应该是'1000000的结果AB000'吗? – fardjad

+0

是... :-(应该是AB001 ... – balaphp

回答

3

如何:

$start = 'AA997'; 
for($i = 0; $i < 5; $i++) { 
    $start++; 
    if (substr($start, 2) == '000') continue; 
    echo $start,"\n"; 
} 

输出:

AA998 
AA999 
AB001 
AB002 
+0

谢谢...它的工作很棒.... :-) – balaphp

+0

substr函数不能处理输入值676000 ..所以我改变了爆炸...... – balaphp

6

完整的解决方案(see it running):

function formatNum1000($num) { 
    $tail =  $num % 1000; 
    $head = (int)($num/1000); 
    $char1 = chr(ord('A') + (int)($head/26)); 
    $char2 = chr(ord('A') +  ($head % 26)); 

    return sprintf('%s%s%03d', $char1, $char2, $tail); 
} 

function formatNum999($num) { 
    $tail =  (($num - 1 ) % 999) + 1; 
    $head = (int)(($num - $tail)/999); 
    $char1 = chr(ord('A') + (int)($head/26)); 
    $char2 = chr(ord('A') +  ($head % 26)); 

    return sprintf('%s%s%03d', $char1, $char2, $tail); 
} 

$ns = array(1, 500, 999, 1000, 1998, 1999, 2000, 25974, 25975, 25999, 26000, 675324, 675999); 
foreach($ns as $n) { 
    $formatted1000 = formatNum1000($n); 
    $formatted999 = formatNum999 ($n); 
    echo "Num: $n => $formatted1000/$formatted999\n"; 
} 

注意你需要确保该输入数字在有效范围内(0 ... 675999,包括000号码,1 ... 675324,否则当)

注意:答案修订,错过了这一点早些时候,000是不允许

+0

+1,不错的一个... – codaddict

+0

+1 - 比循环方法好很多 – DaveRandom

+0

它看起来更好,但对于循环,但我会一直使用mysql自动递增值(主键)来生成这个唯一的ID。如果这个数字是676000,我会得到价值“[A676”,所以它对这个函数有问题...... – balaphp