`
bao231
  • 浏览: 87441 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

产生唯一随机码的方法分析

 
阅读更多

  现在的WEB中经常会需要产生一些邀请码、激活码。需要是唯一并且随机的。下面总结下一些常用的产生随机码的方法,并分享自己的1个方法:

 

1. 自己写代码产生随机的数字和字母组合,每产生1个去数据库查询该随机码是否已存在,如果已存在,则重新产生,直到不重复为止。

     优点:没发现有啥优点。     

     缺点:产生速度慢,还要查询数据库,当数据量大的时候,可能重复的机率会比较高,要查询多次数据库.

 

2. guid,该方法应该是用的比较多的。     

  优点:使用简单方便,不用自己编写额外的代码     

  缺点:占用数据库空间相对较大,特别是根据guid查询速度比较慢(毕竟是字符串)。

 

3. 主键+随机码的方式,我们产生的随机码保存到数据库肯定会有个主键,用该主键+随机字符来组合。产生步骤:     

  1) 先从id生成器中获取id,比如是155.     

  2)填充成固定位数(比如8位)的字符串(不够位数的左边填0,超过位数直接使用该数字),得到:00000155     

  3)在每个数字后面随机插入1个字母或其它非数字符号,得到:0A0F0R0Y0H1K5L5M

   这样就可以得到1个随机的唯一的邀请码了。    

  优点:使用也比较简单,不用查询数据库。最大的优点是查询的时候,可以根据邀请码直接得到主键id,     

     然后根据id去数据库查询(速度很快),再比较查询出来的邀请码和用户提交的邀请码是否一致。    

  缺点:需要使用id产生器,如果主键是数据库自增长的就不太好用(需要先插入数据库获取id,再更新邀请码)。

 

4. 有时候产品经理说,我要求邀请码都是数字的。why?no why? 我喜欢。*(&^(^%&^$&^$ 把方法3变通下就可以实现唯一的纯数字随机码了。    

  1) 获取id: 155    

  2) 转换成8进制:233    

  3) 转为字符串,并在后面加'9'字符:2339    

  4)在后面随机产生若干个随机数字字符:2003967524987 

   转为8进制后就不会出现9这个字符,然后在后面加个'9',这样就能确定唯一性。最后在后面产生一些随机数字就可以。

      优缺点同方法3

 

目前方法3,4方法在我们产品中都使用了,感觉还可以。 



分享到:
评论

相关推荐

    asp.net 产生唯一随机码的方法分析

    在***中生成唯一随机码是很多Web应用程序中的常见需求,尤其是在需要用户激活、邀请码等场景中。要生成这样的码,需要确保码的唯一性以及随机性,以避免重复和安全问题。本文将详细介绍几种常用方法,并提出一种新的...

    archive_VC++随机密码生成器.zip.zip

    标题中的"archive_VC++随机密码生成器.zip.zip"暗示了我们正在处理一个包含VC++(Visual C++)编程项目的压缩文件。这个项目可能是一个用于生成随机密码的应用程序。VC++是Microsoft开发的一个集成开发环境(IDE),...

    CDMA.zip_cdma_cdma仿真_伪随机序列CDMA_伪随机码

    CDMA(Code Division Multiple Access,码分多址)是一种无线通信技术,其核心在于利用伪随机码(Pseudo-Random Sequence, PN码)对信号进行编码,以实现多个用户在同一频段内同时通信而不互相干扰。这个压缩包...

    java 随机产生指定长度的用户名字母 数字格式

    通过上述分析,我们可以清楚地了解到如何在Java中使用 `Random` 类结合字符数组和 `StringBuffer` 来生成指定长度的随机字符串。这种方法不仅适用于生成用户名,同样可以应用于密码生成等场景,具有很强的实用价值。

    随机选号随机种子应用

    总结来说,“随机选号随机种子应用”涉及了C++中生成随机数的基本方法,以及如何在多线程环境下确保随机数生成的独立性。随机数生成不仅需要掌握基本函数的使用,还需要理解不同算法的特点,以便根据应用场景选择...

    C#根据时间产生ID编号

    ### C#根据时间产生ID编号 在软件开发中,经常需要为每一笔数据或记录生成唯一的标识符(ID)。在某些场景下,基于时间戳来生成ID是一种常见且有效的方法。这种方式不仅简单易行,还能确保大部分情况下ID的唯一性。...

    CA码产生verilog工程

    它是一种伪随机噪声码(PRN码),用于调制卫星发射的载波,以实现高精度的时间同步和距离测量。在本“CA码产生verilog工程”中,我们将探讨如何使用硬件描述语言Verilog来设计和实现CA码生成器,并通过ISE集成开发...

    基于序列密码的强PUF抗机器学习攻击方法.docx

    在实验部分,本文使用Python和FPGA对基于该方法的强PUF进行实验验证,采用经典机器学习攻击算法分析其抗攻击能力,并对随机性、唯一性、可靠性以及硬件开销等关键属性进行评估。结果表明,基于序列密码的强PUF抗机器...

    北斗CB1I测距码的产生程序本程序是设计的关于北斗B1信号当中测距码的产生过程

    这种算法通常基于线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)或者Gold码等方法。LFSR是一种高效的序列生成器,通过特定的反馈函数和初始状态,可以产生具有优良特性的伪随机序列。Gold码则结合了两...

    DS-CDMA.zip_DS CDMA_ds-cdma_ds-cdma matlab

    在DS-CDMA系统中,每个用户都分配有一个唯一的伪随机码序列,通常称为扩频码或 Walsh 码。这些码序列具有良好的自相关性和互相关性特性,使得同一时刻不同用户的信号可以同时在信道上传输而不互相干扰。 2. **扩频...

    基于matlab的simulink的cdma系统多用户仿真.doc

    伪随机码序列一般可以利用移位寄存器网络产生。在 DS-CDMA 系统中,所有用户工作在相同的中心频率上,输入数据序列与伪随机序列相乘后得到宽带信息。不同用户使用不同的 PN 序列,这些 PN 序列相互正交。 结论 ...

    PHP中散列密码的安全性分析

    理想的做法是为每个用户生成一个唯一的盐值,并将其与散列值一起存储。 在PHP中,可以使用`random_bytes`函数生成随机盐,确保每个盐值的独特性。然后,将盐和密码拼接,使用如MD5或SHA1这样的散列函数进行加密。但...

    防伪码产生器(包括文件存储,数据库存储)

    防伪码技术是现代商业活动中一种重要的安全措施,主要用于确保产品的唯一性和真实性。在这个防伪码课程实验中,我们将探讨如何生成防伪码并将其存储到文件或数据库中,以实现有效的跟踪和验证。 首先,防伪码通常由...

    NIST随机序列检测代码

    NIST(美国国家标准与技术研究院)开发了一套用于评估随机性质量的测试,这些测试被广泛应用于密码学、安全领域以及数据分析中。本项目提供的是一组根据NIST SP 800-22《随机数生成器的统计测试》实现的代码,该标准...

    信道编码及其识别分析 张永光

    turbo码结合了两个或者多个递归系统卷积码,通过交织器产生出具有极强纠错能力的码流。turbo码的迭代解码算法是其核心,可以逐步逼近最优解。 扰码则是为了防止多用户之间的相互干扰,通过随机化信号的方式来实现。...

    DS_SS.rar_DS CDMA_cdma_ds-cdma

    2. **伪随机码**:每个用户被分配一个唯一的伪随机码,用于区分不同的信号源,这些码通常有很好的自相关性和低互相关性,以减少用户间的干扰。 3. **多址接入**:所有用户在同一频带上发送扩频后的信号,通过解扩频...

    基于FPGA的高速TURBO码编译码器硬件实现方法.pdf

    交织器的硬件实现要求高效率地产生交织地址并确保交织后数据的唯一性和随机性。此外,为了降低译码时的运算复杂度,提高译码速度,设计者在TURBO码迭代译码中的核心模块中采用了交叠滑窗结构。这要求译码器在处理...

    易语言字母数字随机组合例程

    本例程的主题是“易语言字母数字随机组合例程”,这是一个用于生成随机字符串的程序,通常在生成验证码、创建唯一标识符或者进行密码安全测试等场景中很有用。 首先,我们要理解随机数生成的概念。在计算机科学中,...

    随机产生6位数可做短信验证码.txt

    - **唯一性**:确保每个验证码都是唯一的,避免重复使用旧的验证码。 - **时效性**:设置验证码的有效期限,过期后自动失效。 - **防重放攻击**:确保验证码只能使用一次,防止被恶意用户重复利用。 - **存储安全**...

Global site tag (gtag.js) - Google Analytics