根据Python中的其他值创建一个简短的唯一ID?

时间:2017-07-05 15:40:28

标签: python python-2.7 uniqueidentifier

我在python中有许多变量,我想用它们为这些变量生成一个唯一的ID(但是这个ID总是为那些相同的匹配变量生成)。

我已使用.encode('hex','strict')生成似乎的ID,但输出值非常长。有没有办法使用变量生成更短的 ID?

myname = 'Midavalo'
mydate = '5 July 2017'
mytime = '8:19am'

codec = 'hex'

print "{}{}{}".format(myname, mydate, mytime).encode(codec,'strict')

此输出

4d69646176616c6f35204a756c792032303137383a3139616d

我意识到hex它可能取决于三个变量的长度,所以我想知道是否有另一个编解码器可以/将产生更短的值而不排除任何变量?

到目前为止,我已经对来自7.8.4. Python Specific Encodingsbase64bz2hexquopriuuzip进行了测试,但是我不确定如何在不删除变量的情况下获得更短的值。

是否有我可以使用的其他编解码器,或者是一种在不删除唯一性的情况下缩短其中任何值的方法,或者甚至是完全不同的方式来生成我需要的?

我要做的就是生成一个ID,以便在将它们加载到数据库时识别这些行。如果已存在相同的值,则不会在数据库中创建新行。没有安全要求,只有一个唯一的ID。这些值在别处生成到python中,所以我不能只为这些值使用数据库发布的ID。

2 个答案:

答案 0 :(得分:2)

你可以使用hashlib包中的一些散列算法:https://docs.python.org/3/library/hashlib.html或者python 2:https://docs.python.org/2.7/library/hashlib.html

import hashlib
s = "some string"
hash = hashlib.sha1(str.encode(s)).hexdigest() # you need to encode the strings into bytes here

对于相同的字符串,此哈希值相同。 您选择的算法取决于您想要的字符数和冲突风险(两个不同的字符串产生相同的哈希)。

答案 1 :(得分:0)

如果您不特定于哈希,而只想基于两个或多个字符串的 uniq 值。它连接每个字符串的第一个字符并输出一个 uniq 值

#prints HKRC1LB for two string1 and string2

#Concatenate first char of all strings to get a uniq id
def get_uniq_val(*args):
    id = ""
    for i in args:
        for j in i.split():
            id += j[0]         
    return id

def main():
    string_1 = "Howard Kid Recreation Centre"
    string_2 = "150 Lantern Blvd"

    uid = get_uniq_val(string_1,string_2)
    print(uid) 
    

if __name__ == "__main__":
    main()