【问题标题】:python unique id generationpython唯一ID生成
【发布时间】:2015-09-25 16:28:58
【问题描述】:

我想生成一个包含 10 个字符的唯一 ID。这些将包括 32 个字符/数字,即“a”到“v”和“0”到“9”。

不允许相邻重复的字符,例如此“ii”中的“1hdhusiit”是相邻的。

每个键都应该是唯一的。

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。在这里,我们希望您自己解决问题,告诉我们您研究了什么,并向我们展示您尝试过的代码(即使它不起作用),以便我们为您提供帮助.试一试,然后回来向我们展示您的尝试。

标签: python unique-key


【解决方案1】:
def unique_id():
    available_chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', \
    'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', \
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    available_char_count = len(available_chars)
    timestamp = int(time.time() * 1000)
    # First char
    char_index = timestamp % available_char_count
    timestamp /= available_char_count
    uuid = available_chars[char_index]
    last_char = available_chars[char_index]
    available_char_count -= 1
    for i in xrange(9):
        currently_available_chars = list(available_chars)
        currently_available_chars.remove(last_char)
        char_index = timestamp % available_char_count
        timestamp /= available_char_count
        uuid = currently_available_chars[char_index] + uuid
        last_char = currently_available_chars[char_index]
    return uuid

这应该可以工作,除非您的系统不提供time.time() 支持低于 1 秒的分辨率。如果是这种情况,则每秒只能生成一个新的唯一 ID。

【讨论】:

  • 这不会阻止重复字符。它会生成高度可预测的 ID。
  • @augurar 已编辑以修复重复字符问题。你什么也没说让他们变得不可预测。您可能最接近不可预测的唯一键的是散列某些东西,但正如here 指出的那样,散列不能保证是唯一的(尽管它非常非常有可能)。但是,如果您想要真正唯一的键,它们应该是可预测的。这就是让您自信地说它们是独一无二的原因。
  • 非常感谢@bytesized 对你的帮助和好意,我一定会解决的,请给我你的 twitter id 好吗?:)
  • time.time() 的系统要求是什么? @bytesized
猜你喜欢
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多