【问题标题】:How can i generate a 6 digit number in php?如何在 php 中生成 6 位数字?
【发布时间】:2013-02-20 11:31:29
【问题描述】:

如何自动生成一个唯一的、随机的 6 位数字以插入到 mysql 表的列中?随机生成的数字必须不存在于列中。

我正在通过 php 访问 mysql。

表格格式是这样的,随机数在reqnumber列中:

id,status,reqnumber

【问题讨论】:

  • 随机生成或递增表上最新的现有id?
  • 设置你的id为int AUTO_INCREMENT PRIMARY KEY ,当你插入新行时它会自动递增,并且是唯一的。
  • 如果是ID,为什么要随机生成的号码?
  • 因为我想给每个客户一个唯一的号码来关注请求
  • 那你最好把ID留为自增索引,然后用PHP的uniqid()

标签: php mysql


【解决方案1】:
   function gen(){
    $num = rand(100000,999999);
    if($num == ifnumberinyourdatabase){
    gen();
    }
    return $num;
    }

你也可以在这里使用递归函数。 哪个检查数字是否是您的数据库,如果不返回唯一数字,则生成新的数据库

function gen(){
        $num = rand(100000,999999);
$query_idgetrs = "SELECT * FROM servicetbl where reqnumber = $num";
$idgetrs = mysql_query($query_idgetrs, $dbconnection) or die(mysql_error());
$row = mysql_num_rows($idgetrs);

        if($row >= 1){
        gen();
        }
        return $num;
        }

【讨论】:

  • 这不可能生成000010
  • OH 在这种情况下你的答案看起来是对的,但它需要检查数据库
  • 你能帮我写“ifnumberinyourdatabase”代码吗? $query_idgetrs = "从 servicetbl 中选择 id"; $idgetrs = mysql_query($query_idgetrs, $dbconnection) 或死(mysql_error());而 ($idgetrs1 = mysql_fetch_array($idgetrs)) { $peyg = $idgetrs1[0];回声 $peyg; } 帮我改一下这段代码
  • @CGoldisFakhry 编辑的答案希望有帮助,如果1 or more 表示它在您的数据库中,请使用 mysql_num_rows() 检查返回多少行,因此再次生成$num
  • @davidstrachan 类型转换它
【解决方案2】:

只需生成一个随机数,然后使用str_pad()

$myRandom = str_pad(rand(1,999999), 6, '0', STR_PAD_LEFT);

您将遇到的问题是,由于您要求它是随机的,因此在生成之前无法知道它是否存在于表中。您必须创建一个循环并继续检查 DB。

【讨论】:

    【解决方案3】:

    对reqnumber字段设置唯一约束,并在PHP中放置错误处理代码

    【讨论】:

      【解决方案4】:

      虽然随机也可以,但请注意,6 位数字仅提供 100 万种组合。我不确定要多久才会开始出现重复的主键错误。

      更好的解决方案是使用唯一值。这与随机值非常不同,因为唯一值保证每次都不同。 MySql 有 auto_increment 数据类型来帮助你。不幸的是,当使用 6 位数字时,您仍然被限制为 100 万个条目。

      如果您想要一个完全随机的长标识符,请查看MySql's UUID function。它将生成一个保证永远不会重复的唯一字符串。然而,它比 6 个字符长得多,因为这是实现唯一性所需要的。

      【讨论】:

        【解决方案5】:

        表结构的一部分必须是:

        `id` mediumint(6) AUTO_INCREMENT NOT NULL,
        PRIMARY KEY (`id`)
        

        如果你真的总是需要 6 位数字:

        ALTER TABLE tbl AUTO_INCREMENT = 100000;

        或使用 sprintf()

        【讨论】:

        • 这会将最大长度 6 分配给整数。它不会将12 转换为000012
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 2017-04-03
        • 1970-01-01
        • 2019-10-25
        相关资源
        最近更新 更多