如何生成不重复的随机数或者随机字符序列

1.生成不重复的随机字符串

随机字符序列在哪里用的上呢?举个栗子,购物网站需要生成大量的验证码图片,把随机字符序列作为这些图片的名字就是一个不错的选择。出现在文件名中的字符可以包括./_|数字0-9以及大小写字符共62个不同字符,为了保证文件命名的正确性,将每个图片文件的前三个字符设置为pic,现在假设我们设定每个文件名称(不含后缀)共需13个字符(如下图所示)。根据这个格式我们可以最多给11^62张图像命名,这个数据量应该足够一般网站使用了吧。


M1.添加一个序号

      通过随机的方法生成这个验证码序列并不难,但是有可能出现生成的随机序列相同的情况(虽然对于这个问题来说概率极小)。怎样才能避免这样的情况出现呢?最简单的方法就是在生成的字符序列指定位置插入一个递增的编号,比如需要给超过1000张图像命名,就可以将一个三位数(000-999)插入到生成的字符序列中,上述图像的名字变成了T1._154A44BFeljX.jpg。

M2.比较的方法

      将新生成的字符序列和已用于命名的字符序列进行逐一比较,这个方法只适用于数据量比较小的情况,对于给出的例子中的情况,则会耗费掉大量的时间。


2.生成不重复随机数字

假设我们需要生成1000个1000以内的随机数,并将生成的随机整数一次存入到数组random_seq[1000]中。

M1.设置标记

我们设置一个1000维的数组bool flag[1000],所有元素都默认设置为false。当随机生成458时候,就将bool[459]设置为true,这样当下次生成一个随机数的时候我们就通过flag数组判断这个数据是否已经存在,若已经存在就丢弃重新生成一个。这个方法浪费了额外的空间,为了节省空间还可以使用一个比特序列来存储生成的状态。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值