私のクライアントの 1 人が、自分のアイテムに一意のコードを使用したいと考えており (長い話です..)、彼は私に解決策を求めてきました。コードは 4 つの部分で構成され、最初の部分は商品の発送元の郵便番号、2 番目の部分はサプライヤー登録番号、3 番目の数字は商品が発送された年、最後の部分は 3 つの数字です。部門の英数字の一意の文字。
ご覧のとおり、最初の 3 つの部分は静的フィールドであり、同じ送信者が同じ年に変更されることはありません。したがって、最後の部分はその年の識別子部分であると言えます。この部分は 3 分割の英数字で、000 から始まり ZZZ で終わることを意味します。
問題は、私のクライアントが、いくつかの合理的な理由で、この部分をシーケンシャルにしないことを望んでいることです。たとえば、これは彼が望んでいるものではありません。
06450-05-2012-000
06450-05-2012-001
06450-05-2012-002
...
06450-05-2012-ZZY
06450-05-2012-ZZZ
最後の部分は、次のようにランダムに生成されます。
06450-05-2012-A17
06450-05-2012-0BF
06450-05-2012-002
...
06450-05-2012-T7W
06450-05-2012-22C
しかし、それはまた非反復的であるべきです。したがって、可能な ID が生成されたら、その可能性は選択プールから破棄する必要があります。
これを行うための効果的な方法を探しています。
- 選択した可能性のみを記録し、それらに対して新しく作成された可能性をチェックすると、特に最後近くで、既に選択済みのものを作成し続けるという最悪のケースの可能性が常にあります.
- 一度にすべての可能性を作成してテーブルまたはファイルに記録すると、選択されていないレコードを検索するため、アイテムを作成するたびに時間がかかる場合があります。ちなみに26文字+10桁は46.656通りの組み合わせで、4等分を足すと1.679.616通りの組み合わせになる可能性があります。
あなたが提案できるより効果的な方法はありますか?コーディングには C# を使用し、データベースには MS SQL を使用します。