顧客名と生年月日から一意の番号を生成したいと考えています。
私の顧客名がChandra shekarで、彼の生年月日が28/12/1990
.
私は何かが欲しい xxxx-1990
xxxx
顧客名に基づいて生成される番号である必要があります。
文字列値から数値を生成するにはどうすればよいですか?
ありがとうございました。
文字列から数値を生成することだけが必要な場合は、GetHashCode()を使用できます。
var customerName = "John Smith";
var yourReferenceNumber = customerName.GetHashCode();
ただし、これはあなたの番号の一意性を保証するものではないことに注意してください。
一意性をすぐに保証できるようにする必要がある場合、これは注意が必要です。文字列を「小さい」数 (元の文字列よりも情報の点で常に小さい) に変換しようとするスキームは、常に衝突の可能性に悩まされます。
したがって、それは本当にあなたの要件に依存します。後でこの ID を確実に生成できるようにする必要がある場合は、純粋にアルゴリズム的に名前と番号を指定すると、問題が発生します。
一方、「名前、生年月日、生成されたID」をどこかのテーブルに保存できる場合は、何らかの形式のハッシュを使用することから始めることができます(GetHashCode
それが保持されるという保証はないため、使用はお勧めしません時間の経過とともに安定していますが、いくつかの一般的な暗号化ハッシュは問題ないはずです) そして、表で結果を調べます。一意性のために別の部分を使用することもできます。たとえば、「Fred Blogs」のハッシュが 1234 で、「Jim Smith」のハッシュも同様だった場合、次のようになる可能性があります。
Fred Blogs => 1234-0-1990
Jim Smith => 1234-1-1990
ただし、そのような状況にある場合は、最初からグローバルに一意の ID を生成することを検討できます。解決しようとする前に、正確な要件を解決することがすべてです。私が言うように、「唯一無二の数」という考えは捨てるべきです。
Habib が言及しているように、名前と生年月日が同じ複数の顧客の可能性も考慮する必要があります。
このようなコードを使用してみてください
var yr = DateTime.Parse("28/12/1990" , new CultureInfo("en-US")).Year;
var custName = "Chandra shekar";
var result = custName + yr ;
Console.WriteLine(result);
それがあなたを助けることを願っています。