php随机生成id,如a32-jn3-sdf3

时间:2017-07-04 02:30:16

标签: php

目前我得到的代码是in5v6wyio0er5isu9rv4,那么如何在ID中获得更多数字和更少的字母?

下面是我已完成的代码

    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $randomString = '';

    for ($i = 0; $i < 20; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }

    echo $randomString;

我想以这种格式获取身份证号码6437270e-c2d4-4524-8a26-ad311c4ca55e。

3 个答案:

答案 0 :(得分:0)

如果您想要更多号码,请在可用字符串中复制它们以获得更高的优先级:

$characters = '012345678901234567890123456789abcdefghijklmnopqrstuvwxyz';

数字格式,只需自己预先格式化:

 $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $randomString = '';

    for ($i = 0; $i < 24; $i++) {
         if($i % 5 == 0){
             // Add "-" each 5 characters
             $randomString .= "-";
         }else{
             $randomString .= $characters[rand(0, strlen($characters) - 1)];
         }  


    }


    echo $randomString;

答案 1 :(得分:0)

您需要修复for循环。你告诉PHP从inflect.irregular 'operador', 'operadores' 添加一个随机字符20次,所以它永远不会打印像XXXX-XXXX-XXX等,因为&#34; - &#34; $characters中的字符不均匀。我看到两个可能的答案:

  1. 添加条件
$characters

对要插入的所有for ($i = 0; $i < 20; $i++) { if (i === 8) { // at the 9th position, add an "-" $randomString .= "-"; } else { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } } 执行此操作。

  1. 分开你的for循环。也就是说,首先为第一个字符序列创建一个for循环,然后添加&#34; - &#34;,然后为第二个字符序列添加第二个for循环,依此类推。 (从表面上看,这似乎是糟糕的编码实践;令人震惊的WET方法)

至于希望包含更多数字而不是字母,请创建两个不同的字符串:"-",或者只是在数字后$numbers = '0123456789'; $letters = 'abcd...'开始随机数(即$characters)如果您想要rand(10, strlen($characters) - 1)的某些地方的字母和其他地方的数字,请在10之前收到一封信或在$randomString之前结束。

如果你想增加获得号码的几率,可以使用HuyTrịnh的精彩建议:你可以在$characters添加更多数字或字符,以增加获得随机字符/数字的几率。

答案 2 :(得分:0)

根据您的代码做一些编辑,并且&#39;我的菜鸟方式

$characters ='012345678901234567890123456789abcdefghijklmnopqrstuvwxyz0123456789';
$randomString = '';

$count = strlen($characters);

for ($i = 0; $i < 32; $i++) {
    $random = rand(0, $count - 1);
    if($i == 8 || $i == 13 || $i == 17 || $i == 21){
        $randomString .= "-";
    }
    $randomString .= $characters[$random];
}

echo $randomString;