c# - 生成一组(相对)短的 "invitation codes"的好方法是什么

标签 c# sql-server

<分区>

在我的应用注册过程中,系统会询问用户是否有邀请码。这是一种识别“VIP”用户并立即授予他们访问权限的方法,而不是将他们放在等候名单上。

我已经(大部分)弄清楚了一切,但对于如何创建唯一代码集以及存储它们的最佳方式一无所知。对于这样的事情,普遍接受的做法是什么?我应该如何将这些值存储在 SQL 中(作为字符串,或作为二进制值,或什么?)

谢谢!


编辑 1

  • 任何一组随机的数字/字母都可以。不需要任何特定格式。
  • 每个VIP用户都会有自己的代码
  • 将(可能/希望)分发几千个代码。

最佳答案

假设您有关于用户的被认为是唯一的信息,例如电子邮件,您可以根据该信息创建哈希码。

userInfo.email.GetHashCode();

现在这不是非常漂亮。但它有效。

我使用的另一种方法是创建励志名言词典。 从字典中随机抽取一个,将其放入他们的个人资料中; 我给他们的注册链接在报价字段中预填,如果它通过 URL 进入并且匹配则隐藏它。 当他们提交数据以创建帐户时,他们的电子邮件和报价必须匹配。

您需要考虑的是人们尝试破解 VIP 帐户的可能性有多大。如果安全是一个问题,那么您需要发送一个加密的散列。但如果这不能保护“高值(value)”目标,那么请考虑用户体验并提升您的品牌。这就是我选择引用的原因。

如果用户不能从邀请中干净地复制和粘贴,请不要使用用户难以输入的内容。

关于c# - 生成一组(相对)短的 "invitation codes"的好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458555/

相关文章:

c# - 我无法将简单的用户名与正则表达式匹配?

c# - 如何只接收某些列?

sql-server - 从托管实例中的字符串转换日期和/或时间时转换失败 - 为什么?

sql-server - 发布 'xx' 的并发快照不可用,因为它尚未完全生成,或者日志读取器 A

sql-server - 如何在sql查询中的内连接和case语句上应用partition by和row_number()

sql - 填充 SQL 查询结果集中缺失的(时间段)行

C# MVVM DataGrid 绑定(bind)策略?

c# - Hangfire 使用 MongoDB 执行长时间运行的后台作业不断重启

c# - 绑定(bind)到 Entry.Text 的属性 setter 无限循环

sql-server - 通过 Internet 将数据从 SQL Server 安全传输到 SQL Server