为注册生成唯一的10位字母数字代码

时间:2015-11-12 20:45:24

标签: c# .net security

注册新帐户时,用户必须提供访问代码,以确定他们有权访问哪些信息。目前,我们通过生成随机数并检查数据库来创建新代码,以确保它与任何现有值都不匹配。随着数据库的增长,我们对此存在性能问题。

我们想要一种新方法来生成这些值,以保证唯一性,而无需查询数据库来检查现有值。

我们的要求是:

  1. 能够为同一条数据生成多个访问代码,以便多个用户可以访问它。
  2. 不过长,我们目前使用的是10位数字,但加上或减去一些是正常的。
  3. 人类可读的字符。今天这仅限于:
      

    2 3 4 5 6 7 8 9 B C D F G H J K L M N P Q R S T V W X Y Z

  4. 我们可以使用我们授予访问权限的数据属性做些什么,例如主键(Guid)?

1 个答案:

答案 0 :(得分:2)

因此,如果检查代码是耗时的操作,您可以简单地生成一个GUID(几乎)保证是唯一的,然后将其视为32-char十六进制数,然后将其转换为29 - 数字系统。这个系统中的数字不是0..28,而是你的角色 - 2,3,4 ......,X,Y,Z。

GUID是128位数字,因此在29位数系统中,它将是大约26位数/字符。是的,这远远超过10位数。

另一种方法是生成随机字符串,并尝试作为主键插入数据库 - 很少,当您收到冲突时,您会收到插入错误,因此您可以处理它并生成新密钥