Это сложно, если вам нужно быть в состоянии гарантировать уникальность немедленно. Любая схема, которая пытается преобразовать строку в «небольшое» число (которое всегда будет меньше с точки зрения информации, чем исходная строка), всегда будет страдать от возможных столкновений.
Так что это действительно зависит от ваших требований. Если вам нужно будет надежно сгенерировать этот идентификатор позже, дайте имя и номер чисто алгоритмически, у вас есть проблема.
С другой стороны, если вы можете хранить «имя, дату рождения, сгенерированный идентификатор» в таблице где-то, то вы можете начать с использования хеша какой-либо формы (я бы не предложил использовать GetHashCode
, поскольку нет убедитесь, что он будет оставаться стабильным с течением времени, но некоторые общие криптографические хэш должны быть в порядке), а затем посмотреть результаты в таблице. Вы могли бы использовать и другую часть для уникальности. Например, если хэш для «Фред Блогов» дал 1234, и таким образом сделал хэш «Джим Смит», вы могли бы в конечном итоге с:
Fred Blogs => 1234-0-1990
Jim Smith => 1234-1-1990
Но опять же, если вы в такой ситуации вы можно было бы просто создать глобальный уникальный идентификатор для начала. Все дело в разработке точных требований , прежде чем пытаться их решить. Как я уже сказал, вы должны отказаться от идеи просто «целого числа, которое уникально» - это обречено из-за pigeonhole principle.
Как упоминает Хабиб, вам также необходимо рассмотреть возможность использования нескольких клиентов с тем же именем и датой рождения.
Откуда взялось это значение? вы имеете в виду вашу базу данных? – lexeRoy
Предположим, что 'birth' is DateTime:' string yr = birth.Year.ToString() '; – Tim
Вы пробовали _anything_ до сих пор? Покажите свои усилия в первую очередь. –