发布于 1970-01-01 08:00
  • 10 个回答
    • 保证不会重复最简单的方法就是建立一一映射,映射的一边是0~5000w,另一边是10位字符串也就是 pow(36, 10),一个简单的做法就是标志位+大数表异或,原理参考另一个回答,这里直接贴实现

      http://jsfiddle.net/y6ewhyqu/

      因为JS的二进制运算似乎只支持到32位,所以这里只生成到0x7FFFFFFF,大约是36进制的6位,需要10位的话可以做两次(准备不同的两份大数表),或者后四位填充md5 crc之类的,算的时候舍去都行

      2022-12-01 20:58 回答
    • 推荐UUID

      function guid(){
          if (function_exists('com_create_guid')){
              return com_create_guid();
          }else{
              mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
              $charid = strtoupper(md5(uniqid(rand(), true)));
              $hyphen = chr(45);// "-"
              $uuid = chr(123)// "{"
                      .substr($charid, 0, 8).$hyphen
                      .substr($charid, 8, 4).$hyphen
                      .substr($charid,12, 4).$hyphen
                      .substr($charid,16, 4).$hyphen
                      .substr($charid,20,12)
                      .chr(125);// "}"
              return $uuid;
          }
      }
      
      2022-12-01 20:58 回答
    • 嘛暂时弄个伪代码吧- -
      i=0
      字符串s=[]
      for i从0到生成数量
      字符串s push ( (sha256(i) 格式hex) substr(0,长) )

      2022-12-01 20:58 回答
    • md5(time().rand(10000,9999999));

      2022-12-01 20:58 回答
    • 我问了一个朋友,他提供一个思路。
      10个字符串,前5个从00000到zzzzz递增,后5个随机。这样的10个字符串肯定不会重复。

      长度较小,比如6,7等,这样的数还是容易发现规律的。

      2022-12-01 20:58 回答
    • 首先 毫秒级的时间戳是必须的 然后一切可以随机的东西都可以拿来用 包括某些拿汇编得到的数据
      最后就是加上伪随机码
      还是一点 我感觉10位的长度还是不够 太短了 你去看看那些网游的点卡都是多长的

      突然想到一点 这种东西最重要的就是预警机制 比如连续输错几个 就封禁ip15分钟内不准再输了 同时提供预警机制告诉有人来试你的充值系统了

      你就算再长能顶得住点正的人么 彩票那么难中不还有中500万的

      2022-12-01 20:58 回答
    • 加上time()时间戳 然后HASH 就可以避免重复了吧

      2022-12-01 20:58 回答
    • $part1 = base_convert(str_replace("-", "", str_replace(".", "",strval(microtime(true))).strval(SlString::getHashCode(md5(strval(uniqid(rand(), true)))))), 10, 32);
      $part2 = sprintf('%04x%04x%04x%04x%04x%04x%04x%04x', mt_rand(0,65535),mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384,20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535),mt_rand(0,65535));
      $guid = substr($part1 . $part2, 0, 32);
      return $guid;

      2022-12-01 20:58 回答
    • 写数据库,唯一索引,写不进去$i减1。

      2022-12-01 20:58 回答
    • 多随机一些,排序去重。

      2022-12-01 20:58 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有