• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 如何生成数千万不重复的固定长度的字符串?

如何生成数千万不重复的固定长度的字符串?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了字符串长度,字符串长度函数,php 字符串长度,计算字符串长度函数,js 字符串长度等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:如何生成数千万不重复的固定长度的字符串?
描述:

字符串有a-z,0-9组成。

假设需要生成5000w个这样的串(比如长度为10),在生成过程中,如何保证字符串不会重复呢?要求生成的结果具有一定的随机性,不能让人简单的猜出。
比如下面的不符合要求:
aaaaaaa,aaaaaab,aaaaaac...... zzzzzzzzb
希望是这样的串:
hd7g0d48。


解决方案1:

多随机一些,排序去重。

解决方案2:

写数据库,唯一索引,写不进去$i减1。

解决方案3:

$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;

解决方案4:

加上time()时间戳 然后HASH 就可以避免重复了吧

解决方案5:

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

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

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

解决方案6:

我问了一个朋友,他提供一个思路。
10个字符串,前5个从00000到zzzzz递增,后5个随机。这样的10个字符串肯定不会重复。

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

解决方案7:

md5(time().rand(10000,9999999));

解决方案8:

嘛暂时弄个伪代码吧- -
i=0
字符串s=[]
for i从0到生成数量
字符串s push ( (sha256(i) 格式hex) substr(0,长) )

解决方案9:

推荐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;
    }
}

解决方案10:

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

http://jsfiddle.net/y6ewhyqu/

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • golang如何在ini文件指定位置写入字符串
  • js截取字符串PHP字符串如何截取表单内的内容?
  • golang中字符串乱码问题
  • 字符串长度问题vs字符串长度问题
  • PHP字符串中匹配url
  • php如何过滤掉字符串中的某个标签?
  • Java中如何获取字符串中的关键字?
  • 如何判断字符串中括号都对应了,没有单个出现?
  • 如何生成数千万不重复的固定长度的字符串?
  • 用js生成一个长度为1000万的字符串

相关文章

  • 2017-06-07 用scrapy做的爬虫总是抓不到数据,这是交互环境下的信息,哪位大神给看看问题出在哪
  • 2017-06-07 python爬虫Python死循环处理不断输出的日志
  • 2017-06-07 mac10111系统如何添加环境变量
  • 2017-06-07 一个界面建议
  • 2017-06-07 想用python做音频节拍识别(wav),有没有现成的库?
  • 2017-06-07 如何通过技术手段识别PHP网站生成的验证码?
  • 2017-06-07 iOS客户端要上传图片到七牛,有木有完整的七牛php服务端的代码,Demo也行,官方PHP-SDK看不太懂。
  • 2017-06-07 (golang)Vim下Gofmt等插件的运行问题
  • 2017-06-07 Github中的项目怎么收藏
  • 2017-06-07 私有M3U8(pm3u8)的处理模式参数Mode除了0(0表示对所有ts资源的URL进行下载授权)还有哪些?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何修改tornadowebRequestHandler的日志格式?
    • 计算器是如何对结果如何进行自然显示(显示根号和分数)
    • 基于433MHz射频的无线Mesh网络
    • 客户端访问部署在JBoss上的EJB问题
    • vfp9如何一段代码在表单显示之后才执行
    • (python)有用AngularJS和Django写网站的吗?
    • @七牛云存储请问我的账户啥时候能通过认证啊
    • 我已经绑定了手机,为何还是只可以创建一个空间
    • 斐波那契查找数列的排列和长度问题
    • ios和androidsdk都不支持上传策略?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有