Генерация буквенно-цифровых уникальных номеров - PullRequest
1 голос
/ 13 декабря 2011

Я хочу сгенерировать буквенно-цифровые уникальные числа, но формат должен быть таким:

, который должен начинаться с AA001 до AA999, после этого с AB001 до AB999 .... BA001 до BA999 заканчиваются ZZ999.если я приведу ввод

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

Кто-нибудь может помочь в этом?

Ответы [ 2 ]

6 голосов
/ 13 декабря 2011

Полное решение ( увидеть его работающим ):

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 не допускается

3 голосов
/ 13 декабря 2011

Как насчет:

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

Вывод:

AA998
AA999
AB001
AB002
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...