PHP有序唯一ID

PHP有序唯一ID,php,unique,Php,Unique,您好,我希望有人能帮助我,因为我有点困惑的任务,我必须做的PHP 我需要具有以下参数的唯一注册ID的php文件: 第一个是AA00001,下一个是DF00002 所以第一个字母+3和第二个字母+5,但数字的顺序是+1 有人能给我一个如何实现这一点的提示吗? 谢谢大家! 您可以使用substr拆分ID、dechex和hexdec,将其转换为十进制或从十进制转换为十六进制,这将为您提供A+3=D部分,您可以使用str_pad将整数前置填充为零,这将为您提供第二部分,然后将它们连接起来 埃塔:类似这样

您好,我希望有人能帮助我,因为我有点困惑的任务,我必须做的PHP 我需要具有以下参数的唯一注册ID的php文件: 第一个是AA00001,下一个是DF00002

所以第一个字母+3和第二个字母+5,但数字的顺序是+1

有人能给我一个如何实现这一点的提示吗?
谢谢大家!

您可以使用substr拆分ID、dechex和hexdec,将其转换为十进制或从十进制转换为十六进制,这将为您提供A+3=D部分,您可以使用str_pad将整数前置填充为零,这将为您提供第二部分,然后将它们连接起来

埃塔:类似这样的:

$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);
在伪代码中:

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。这将是最难的部分。

首先您必须解析最后一个注册ID(使用substr),然后,
$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
将每个值存储在与位置对应的var中
$first、$second、$numberpart
。然后

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

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

您能告诉我们您尝试了什么以及尝试失败的地方吗?那么,GK00003将是下一个吗?另外,我假设字母环绕?是的,GK00003,这一切都应该发生在html中的按钮点击…谢谢你,这就是我需要的!目前正在努力使它继续增长的按钮点击…这段代码工作良好!但是,当尝试使用在线php预览测试它时,它说明了sprintf的一些安全风险。。。