从名称和地址数据创建一个 id。哈希/摘要

use*_*203 4 algorithm hash digest

我的问题:

我正在寻找一种将一个人的姓名和地址表示为编码 id 的方法。id 应该只包含字母数字字符,是防冲突的,并以尽可能少的字符表示。我的第一个想法是简单地使用像 MD5 或 SHA1 这样的加密哈希函数,但这似乎有点矫枉过正(安全性并不重要 - 不需要是单向的),我更愿意找到可以产生更短的 ID。有谁知道适合这个问题的现有算法?

换句话说,实现以下函数的最佳方法是什么,以便相同输入的返回值始终相同,不太可能发生冲突,并且 id 少于 20 个字符?

>>> make_fake_id(fname = 'Oscar', lname = 'Grouch', stnum = '1', stname = 'Sesame', zip = '12345')
N1743123734
Run Code Online (Sandbox Code Playgroud)

应用程序上下文(对于那些感兴趣的人):

这将用于记录链接应用程序。给定一个输入名称和地址,我们在一个非常大的数据库中搜索最佳匹配并返回数据库 ID 和其他数据(我们如何做在这里并不重要)。如果没有匹配项,我需要从搜索输入(实体的名称和地址数据)生成这个伪/生成/派生 ID。每个搜索记录都应该产生一个输出记录,其中包含一个真实的(由匹配/链接产生的实际数据库 ID)或这个生成的伪/生成/派生 ID。伪 id 将以字符(例如 N)为前缀,以将其与真实 id 区分开来。

Pau*_*lin 5

我知道您拒绝了 MD5 和 SHA1,但我认为您无论如何都应该考虑它们。除了经过深入研究的散列算法外,长度还可以为您提供更多保护,防止可能发生的冲突。没有哈希是防冲突的,但加密的通常比您自己想出的更不容易发生冲突。