【问题标题】:Generating unique tracking numbers生成唯一的跟踪号
【发布时间】:2009-11-01 06:46:41
【问题描述】:

我正在构建一个小型 Rails 应用程序,我需要一种方法来生成跟踪号,以便客户检查他们的状态。我想要类似于主要航运公司使用的东西,但时间不长。我认为 12-16 个字符长很好,但我不想要像 0000000001 这样的东西,人们可以输入递增的数字并四处窥视。

生成唯一数字/字母组合跟踪代码的好方法是什么?

【问题讨论】:

  • 散列常用方式?
  • 如果您想减少 ID 中的字符数,请考虑对代码进行 base32 或 base64 编码。

标签: mysql ruby-on-rails ruby


【解决方案1】:

对于无意义的数据,时间的哈希值加上盐总是坚如磐石,不容易猜到(原谅 Python,我听说过这个 Ruby 东西,但从未掌握过在我的手中):

>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()
'7a8b73fa7e0dadf246612e6001ede165'

如果你愿意,可以缩短它:

>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:16]
'46ffb69ebc96412d'

如果您愿意,请改用整数,但长度可能会随此代码而变化,除非您使用零填充:

>>> int(hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1346212029197308

在“zomg md5 不是加密安全”之前:

>>> int(hashlib.sha256(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1948411134966366

天啊,你甚至不必使用时间,你可以使用一个自动递增的整数,只要你加盐:

>>> int(hashlib.sha256(str(1) + "!salt!").hexdigest()[:13], 16)
1269883740611281
>>> int(hashlib.sha256(str(2) + "!salt!").hexdigest()[:13], 16)
3655373802716929

哈希。有什么他们不能做的吗?

【讨论】:

  • 如果您想在跟踪号中嵌入某种程度的日期信息,您可以在随机散列前加上十进制形式的 unix-time 的前几位数字。前 6 位数字将唯一标识时间,直至大约 3 小时。这将产生使您的跟踪代码半顺序的附加效果(例如,这将在排序记录中提供有用的属性)。
  • @wedge 谢谢你的好主意,又一次缺乏睡眠让我的脑海中出现这样的事情。
  • @Wedge:是的,散列只是一个开始,真的。好主意。
  • 谢谢 -> 在 c# 中使用 GUID、SHA256 和位掩码重新实现了一个类似的东西来创建我需要的数字。
【解决方案2】:

为每个表生成的 id 还不够吗? “默认”是唯一的。但大多数时候根本就没有显示出来,

当然可以将其包装在时间戳等中。

【讨论】:

    【解决方案3】:

    为什么不使用哈希图来存储订单信息并为用户提供 ID 的十进制/十六进制表示?它足够独特。

    【讨论】:

      【解决方案4】:
      SELECT HEX(encode(id,'pass_str')) FROM table;
      SELECT * FROM table WHERE id=decode(UNHEX('1F68C22821F2AC'), 'pass_str');
      

      【讨论】:

        【解决方案5】:

        我为这种场景编写了一个名为acts_as_hashed (on github) 的插件。您可以指定要在散列算法中使用的字段,插件将根据这些字段提供一个唯一的密钥,称为 crypto_hash。这往往比手工操作更干净,并且可以在您的应用中与任意数量的模型一起使用。

        【讨论】:

          猜你喜欢
          • 2015-09-01
          • 2018-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-18
          • 2011-05-21
          相关资源
          最近更新 更多