gpt4 book ai didi

c# - 使用内置校验和创建唯一 ID?

转载 作者:行者123 更新时间:2023-11-30 19:19:32 24 4
gpt4 key购买 nike

我想自动生成一个唯一的 8-10 个字符的 ID 字符串,其中包含某种校验和位以防止数据输入时出现拼写错误。我更喜欢没有序列号的东西,数据输入人员最终会陷入“陈规”并习惯于一直输入相同的序列。

是否有任何与此类事情相关的最佳实践/陷阱?

更新:好的,我想我需要提供更多细节。

  1. 我想使用字母数字,而不仅仅是数字
  2. 我想要类似于信用卡校验和的行为,除了使用 8-10 个字符而不是 16 位数字
  3. 我希望 ID 是唯一的;不应该有碰撞的可能性。

第二次更新 好的,我不明白这有什么令人困惑的地方,但我会尝试进一步解释。我正在尝试创建将在表格上显示的跟踪号码,稍后将填写表格并输入数据。我将生成 id 并将其放在表单上; ID 必须是唯一的,它需要支持很多数字,并且它需要在数据输入时合理地防止白痴。

我不知道这是否已经完成,或者即使可以完成,但问问也无妨。

最佳答案

您的问题非常笼统 - 因此只是一些一般方面:

  • ID 是否需要“不可猜测”?如果是,那么应该混合某种哈希。

  • ID 是否需要“安全”(例如激活 key 等)?如果是,那么应该混合使用某种公钥密码学。

  • ID/校验和计算是否需要快速?如果是,那么可能值得研究一些非常简单的算法,例如 CRC32 或 Luhn(信用卡校验和算法)或 soem 条形码校验和算法。

  • ID 生成是集中的吗?如果没有,那么您可能需要检查 GUID、当前时间、MAC 地址和类似内容。

更新 - 根据评论:

  • 在数据库中使用序列
  • 获取该值并对其进行哈希处理,例如使用 MD5
  • 取该散列的最低 40-48 位
  • 将其编码为 Base-36(0-9 和 A-Z),这会为您提供 8-10 个“数字”(字母数字)
  • 对照数据库检查结果,如果 ID 已经存在则丢弃(因为发生冲突的可能性非常小)
  • 计算 CRC-6-ITU(参见第 3 页的 http://www.itu.int/rec/T-REC-G.704-199810-I/en)
  • 附加 CRC 结果作为最后一个“数字”(也作为 base-36)
  • 因此您拥有一个包含校验和的唯一 ID

要检查输入的值,您只需从除最后一位以外的所有数字重新计算 CRC-6-ITU,并将结果与​​最后一位进行比较。

以上是比较“不可猜测”的,但绝对不是“高安全性”。

更新 2 - 根据评论:

有关如何在 javascript 中计算 CRC 的一些灵感,请参阅 this - 它包含 CRC-8 等的 javascript 代码。

您应该能够根据 CRC-6-ITU 多项式调整此代码。

关于c# - 使用内置校验和创建唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com