PHP中唯一的4个字符代码

时间:2018-06-05 17:35:18

标签: php mysql

由于我不会进入的原因,我需要创建4个字符的唯一ID,所有ID都以A开头。例如;

AAAA AAAB AAAC

等等。我查看了uniqid()函数,但似乎只会创建一个数值。此代码不需要是随机的,它可以按顺序进行,因此我可以使用以下内容进行迭代。

$letters = range('A', 'Z');

foreach ($letters as $one) {
  foreach ($letters as $two) {
    foreach ($letters as $three) {
      foreach ($letters as $four) {
        echo "$one$two$three$four";
      }
    }
  }
}

现在如何将此循环的状态存储在数据库中,因为并非所有记录都会同时创建?

3 个答案:

答案 0 :(得分:3)

您的代码基本上是一个基数为26的数字,只使用字母作为数字。因此,您可以在数据库中存储递增数字,然后将其转换为相应的代码。

转换为26后,您移动所有数字:0变为A1变为BA变为K等等。

function num_to_code($num) {
    $base26 = str_split(str_pad(strtoupper(base_convert($num, 10, 26)), 4, "0", STR_PAD_LEFT));
    $result = "";
    foreach ($base26 as $char) {
        $result .= is_numeric($char) ? chr(ord('A') + $char) : chr(ord($char) + 10);
    }
    return $result;
}

DEMO

答案 1 :(得分:0)

这不是最好的主意,但如果你在数据库中有一个自动增加的id,你可以随时:

$autoinc = 36; // lets say its the 36th record
$alpha_id = "AAAA";
for($i=0; $i < $autoinc; $i++) {
    $alpha_id++;
}
var_dump($alpha_id); // AABK

如果他们必须从A开始,并且只有4个字符长,那么在你用完之前你只能获得大约17.5k的记录。

答案 2 :(得分:0)

@ Barmar的回答非常好,但我注意到数学完全缺乏。所以我挖出了一些我为这种情况写的旧代码:

string(4) "ABVM"
int(31609)

输出:

for(;;) {
        if(!vcap.read(image)) {
            std::cout << "No frame" << std::endl;
            cv::waitKey();
        }
        cv::imshow("Output Window", image);
        if(cv::waitKey(1) >= 0) break;
    }   
相关问题