2013-04-18 2 views
0

Я хочу создать уникальный номер, основанный на имени клиента и дате рождения.Как создать ссылочный номер с использованием имени клиента и года?

Если мое имя клиента Chandra shekar, а его дата рождения - 28/12/1990.

Я хочу что-то вроде xxxx-1990

xxxx должно быть число, которое должно быть генерировать на основе имени клиента.

Как я могу сгенерировать число из строкового значения?

спасибо.

+0

Откуда взялось это значение? вы имеете в виду вашу базу данных? – lexeRoy

+0

Предположим, что 'birth' is DateTime:' string yr = birth.Year.ToString() '; – Tim

+1

Вы пробовали _anything_ до сих пор? Покажите свои усилия в первую очередь. –

ответ

1

Это сложно, если вам нужно быть в состоянии гарантировать уникальность немедленно. Любая схема, которая пытается преобразовать строку в «небольшое» число (которое всегда будет меньше с точки зрения информации, чем исходная строка), всегда будет страдать от возможных столкновений.

Так что это действительно зависит от ваших требований. Если вам нужно будет надежно сгенерировать этот идентификатор позже, дайте имя и номер чисто алгоритмически, у вас есть проблема.

С другой стороны, если вы можете хранить «имя, дату рождения, сгенерированный идентификатор» в таблице где-то, то вы можете начать с использования хеша какой-либо формы (я бы не предложил использовать GetHashCode, поскольку нет убедитесь, что он будет оставаться стабильным с течением времени, но некоторые общие криптографические хэш должны быть в порядке), а затем посмотреть результаты в таблице. Вы могли бы использовать и другую часть для уникальности. Например, если хэш для «Фред Блогов» дал 1234, и таким образом сделал хэш «Джим Смит», вы могли бы в конечном итоге с:

Fred Blogs => 1234-0-1990 
Jim Smith => 1234-1-1990 

Но опять же, если вы в такой ситуации вы можно было бы просто создать глобальный уникальный идентификатор для начала. Все дело в разработке точных требований , прежде чем пытаться их решить. Как я уже сказал, вы должны отказаться от идеи просто «целого числа, которое уникально» - это обречено из-за pigeonhole principle.

Как упоминает Хабиб, вам также необходимо рассмотреть возможность использования нескольких клиентов с тем же именем и датой рождения.

1

Если все, что вам нужно, чтобы сгенерировать номер из строки, вы можете использовать GetHashCode():

var customerName = "John Smith"; 
var yourReferenceNumber = customerName.GetHashCode(); 

Пожалуйста, обратите внимание, что это не гарантирует уникальность Вашего номера, однако.

+1

Абсолютно нет. Хэш-коды делают * нет * гарантию уникальности. –

+1

Извините, я отвечал «Как я могу сгенерировать число из строкового значения?» –

+1

Итак, давайте сделаем это еще проще и используем 'customerName.Length' - это генерирует * число * из строки, не так ли? Вопрос начинается с: «Я хочу сгенерировать уникальный номер ...» –

-1

пытаются использовать код, как этот

var yr = DateTime.Parse("28/12/1990" , new CultureInfo("en-US")).Year; 
var custName = "Chandra shekar"; 
var result = custName + yr ; 
Console.WriteLine(result); 

надеюсь, что это поможет.

+0

Это не генерирует * номер * в качестве первой части. –

+0

@JonSkeet отредактировал мой ответ. – ripa

+0

Нет, это все еще будет «Chandra shekar-1990», что не то, что хотел OP ... –

Смежные вопросы