生成的字母数字的唯一编号
我要生成的字母数字唯一的数字,但格式应该是这样的生成的字母数字的唯一编号
是AB001到AB999 .... BA001与ZZ999 BA999结束后,应该是从AA001开始AA999。如果我给输入是
1 = result AA001
999 = result AA999
1000 = result AB001
任何人都可以帮助吗?
完整的解决方案(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是不允许
+1,不错的一个... – codaddict
+1 - 比循环方法好很多 – DaveRandom
它看起来更好,但对于循环,但我会一直使用mysql自动递增值(主键)来生成这个唯一的ID。如果这个数字是676000,我会得到价值“[A676”,所以它对这个函数有问题...... – balaphp
不应该是'1000000的结果AB000'吗? – fardjad
是... :-(应该是AB001 ... – balaphp