PHP订购了唯一ID

时间:2011-07-08 15:14:36

标签: php unique

你好我希望有人可以帮助我cus Iam对我在PHP中必须做的任务有点困惑 我需要带有以下参数的唯一注册ID的php文件: 首先是AA00001,下一个是DF00002。

所以第一个字母+3和第二个+5,但数字按+1顺序排列。

有人能给我提示如何实现这个目标吗? 谢谢!

4 个答案:

答案 0 :(得分:1)

在伪代码中:

get previous ID
separate first letter, second letter and number
convert first letter to number, add 3, modulo 26, convert back to letter
convert second letter to number, add 5, modulo 26, convert back to letter
add 1 to number, add zero-padding to reach 5 digits
concatenate them all together
set this as the new "previous ID"

请注意,您需要确保以原子方式发生这种情况 - 即您没有多个进程处理相同的ID,否则他们将获得相同的“下一个”ID。这将是恕我直言中最难的部分。

答案 1 :(得分:0)

你可以使用substr来分割ID,dechex和hexdec来转换为/从十进制到十六进制,它给你A + 3 = D部分,并且你可以使用str_pad来用0填充整数,这给出了你是第二部分,然后你只是将它们连接起来。

ETA:像这样:

$id = 'AA00001';

$first = dechex((hexdec(substr($id,0,1))+3)%16);
$secnd = dechex((hexdec(substr($id,1,1))+5)%16);
$int = str_pad(substr($id,2)+1,5,"0",STR_PAD_LEFT);

$newid = strtoupper($first.$secnd.$int);

ETA2:除非你打算去AA00001,DF00002,GK00003,JP00004,MU00005,PZ00006,SE00007等,否则你需要

$first = chr(((ord(substr($id,0,1))-62)%26)+65);
$secnd = chr(((ord(substr($id,1,1))-60)%26)+65);

答案 2 :(得分:0)

$lastid = 'AA00001';

$first = substr($lastid, 0, 1);
$second = substr($lastid, 1, 1);
$numeric = substr($lastid, 2);

$next_first = chr(((ord($first) - ord('A') + 3) % 26) + ord('A'));
$next_second = chr(((ord($second) - ord('A') + 5) % 26) + ord('A'));
$next_numeric = sprintf('%05d', intval($numeric) + 1);

$new_id = $next_first . $next_second . $next_numeric;

// DF00002

答案 3 :(得分:0)

首先你需要解析最后一个注册码。(使用substr)然后, 将每个值存储在与该位置对应的var中 $first , $second, $numberpart。那么

$first = ($first  + 3 ) % 16;
$second =($first  + 5 ) % 16;
$number = $number + 1;

然后相应地更新记录,将$first, $second转换为他们的批准。字母。