Ese ochuko Ответов: 6

Как сгенерировать уникальный 8 значный номер с помощью c#


Всем привет
я хочу создать winform с двумя текстовыми полями: первое поле-pincode, pincode txtbox-только для чтения, поэтому его нельзя редактировать, другое поле-fullname. я хочу,чтобы при загрузке формы текстовые поля пинкода автоматически генерировали 8-значный уникальный pin-код, который будет вставлен в столбец первичного ключа в таблице, поэтому никакие два номера пинкода не должны быть одинаковыми. если я снова загружаю форму, генерируется еще один pin-код и так далее, и так далее, и так далее .
Заранее спасибо

lukeer

Пусть БД генерирует этот pin-код в качестве первичного ключа. Вы должны каким-то образом уметь указывать СУБД, с какого числа начинать, а затем автоматически увеличивать его для каждой новой записи.

Herman<T>.Instance

уникальный для каждого человека или уникальный для всех?

__TR__

Используйте Идентичность[^] свойство в sql server, и вам не нужно беспокоиться о создании уникальных номеров для вашего первичного ключа.

Ese ochuko

Дело в том, что pin-код будет дан пользователю, и это будет его идентификатор, используя GUID, я не думаю, что это будет удобно для пользователей. я хочу, чтобы pin-код всех пользователей был по крайней мере 8digit или даже 10, если он находится в цифре и уникален. Например, точно так же, как номер кредитной карты уникален для каждого пользователя, номер счета в банке уникален для каждого пользователя, и даже номер телефона уникален для каждого пользователя. Надеюсь, что вы undastand то, что я говорю. Спасибо за вашу помощь.

6 Ответов

Рейтинг:
39

JF2015

Обычно 8 цифр не являются гарантией того, что Ваш идентификатор уникален. Я предлагаю вам использовать GUID, поскольку они являются стандартными и обеспечивают достаточную уникальность. Смотрите здесь для получения дополнительной информации:
http://en.wikipedia.org/wiki/Globally_unique_identifier[^]
и обратитесь к ответу Прасада о том, как создать идентификаторы в C#.

Здесь также есть статьи обсуждать эту тему и предоставляя больше возможностей для вас:
Генерировать уникальные ключи .Чистая[^]


Ese ochuko

Привет, ребята, дело в том, что guid слишком длинный, и это не будет удобно пользователю, потому что pin-код будет дан пользователям в качестве их идентификатора. Возьмем, к примеру, номер счета банка,номер телефона-все они уникальны для разных стран. users.so именно эту идею я пытаюсь воплотить в жизнь, даже если число 10-значное, нет никаких проблем при условии, что оно уникально для каждого пользователя. Или телефонные номера и банковские номера не генерируются автоматически?
Танкс за вашу помощь

Рейтинг:
2

Prasad_Kulkarni

Попробуй идентификатор GUID.Метод NewGuid[^]


__TR__

Хорошее предложение. +5.

Herman<T>.Instance

хорошо...GUID длиннее 8 цифр

__TR__

Да. Но я думаю, что использование случайного класса для генерации уникальных чисел не очень хорошая идея, так как есть вероятность, что число может повториться. Поэтому я подумал, что GUID-лучший вариант. Вот почему я сказал что это было хорошее предложение а не решение :)

Prasad_Kulkarni

Спасибо ТР, :)

Ese ochuko

Привет, ребята, дело в том, что guid слишком длинный, и это не будет удобно пользователю, потому что pin-код будет дан пользователям в качестве их идентификатора. Возьмем, к примеру, номер счета банка,номер телефона-все они уникальны для разных стран. users.so вот эту идею я и пытаюсь воплотить в жизнь даже если число 10 значное нет никаких проблем при условии его уникальности для каждого пользователя

Рейтинг:
2

prashant patil 4987

Попробовать это:

using System.Security.Cryptography; // Import this Dll
public string Get8Digits()
{
    var bytes = new byte[4];
    var rng = RandomNumberGenerator.Create();
    rng.GetBytes(bytes);
    uint random = BitConverter.ToUInt32(bytes, 0) % 100000000;
    return String.Format("{0:D8}", random);
}


Ese ochuko

Есть ли какая-то вероятность, что в вашем коде не будет ни одной цифры, которая будет такой же, потому что я вставляю ее в таблицу первичных ключей

prashant patil 4987

нет...

Ese ochuko

Хорошо, спасибо, так что hw много миллионов уникальных номеров я смогу сгенерировать с помощью кода

Member 10316920

он генерирует дубликат номера.

Рейтинг:
2

saficreator

Генерируйте уникальные номера, используя datetime, как показано ниже

DateTime.Now.ToString("MMddmmssff")

он будет уникальным, как GUID, но GUID создает буквенно-цифровой код.


CHill60

Всего в том числе месяц и миллисекунд не имеет количество уникальный - уникальность имеет важное значение для применения в ОП. Гораздо лучше использовать столбец идентификаторов, инициализированный соответствующим образом - как предложил @lukeer 7 лет назад.

Рейтинг:
1

Karthik Harve

Привет,

protected void form1_Load(object sender, EventArgs e)
{
   //Get the maximum ID from database
   int ID = //From Database.

   txtPostCode.Text=(ID + 1).ToString();

}

protected void btnSave_CLick(object sender,EventArgs e)
{
  // save button click

 // pass the text box value to database.
}


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


Рейтинг:
0

Mohamed Mitwalli

Привет ,
Проверить это

Random rand = new Random(100);
int ccc=  rand.Next(000000000, 999999999);

http://www.c-sharpcorner.com/UploadFile/mahesh/RandomNumber11232005010428AM/RandomNumber.aspx[^]
http://www.dotnetperls.com/random[^]
с уважением
М. Митвалли