私の問題:
人の名前と住所をエンコードされた ID として表す方法を探しています。id には英数字のみを使用し、衝突を防止し、できるだけ少ない文字数で表す必要があります。私が最初に考えたのは、単純に MD5 や SHA1 などの暗号化ハッシュ関数を使用することでしたが、これはやり過ぎのように思え (セキュリティは重要ではなく、一方向である必要はありません)、短いID。この問題に適合する既存のアルゴリズムを知っている人はいますか?
つまり、次の関数を実装して、同じ入力に対して一貫して同じ値を返し、衝突の可能性が低く、id が 20 文字未満になるようにする最善の方法は何ですか?
>>> make_fake_id(fname = 'Oscar', lname = 'Grouch', stnum = '1', stname = 'Sesame', zip = '12345')
N1743123734
アプリケーションのコンテキスト (興味のある方):
これは、レコード連携アプリに使用されます。入力された名前と住所を指定すると、非常に大きなデータベースを検索して最も一致するものを探し、データベース ID とその他のデータを返します (これを行う方法はここでは重要ではありません)。一致するものがない場合は、検索入力 (エンティティの名前と住所のデータ) からこの疑似/生成/派生 ID を生成する必要があります。すべての検索レコードは、実際の (一致/リンクから得られる実際のデータベース ID) またはこの生成された疑似/生成/派生 ID のいずれかを持つ出力レコードになるはずです。疑似 ID には、実際の ID と区別するために文字 (N など) がプレフィックスとして付けられます。