Ich habe RNGCryptoServiceProvider
verwendet, um string-basierte Bestell-IDs zu generieren, aber es gab 4 Fälle, in denen ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@$%^*()_-
eine bereits existierende Bestell-ID erzeugen würde.
Und es hat mich zum Nachdenken gebracht ...
Warum können wir nicht einfach etwas wie:
verwenden? %Vor%und:
%Vor%Mir wurde gesagt, dass es eine schlechte Idee ist, aber ohne irgendeine Erklärung oder Grund, es ist immer noch in meinem Kopf stecken. ... Der Grund, warum ich das verwenden möchte, ist, dass immer eindeutig sein wird.
Computer arbeiten im Nanosekundenbereich. Sie würden garantiert eine doppelte Bestellnummer fast sofort generieren.
Am besten verwenden Sie eine GUID [MSDN-C#] [MSDN-SQL] (aka UNIQUEIDENTIFIER
in die SQL-Welt).
Niemals den Now
getter mehrmals aufrufen. "Jetzt" kann sich ändern, während Sie die Zeichenfolgen hinzufügen. Sie können DateTime.Now.ToString("yyyyMMddHHmmssfff")
oder ähnlich sagen, aber es ist viel besser, hierfür Guid.NewGuid()
zu verwenden.
Wenn Sie nur einen global eindeutigen Bezeichner haben möchten und sich nicht um das Format kümmern, warum verwenden Sie nicht einfach eine GUID ?
%Vor%Es hat sogar einen Typ in T-SQL (den Sie möglicherweise verwenden werden dass Sie ASP.NET verwenden)
Ich empfehle, dass Ihre Datenbank diese Verantwortung übernimmt, aber wenn Sie dies im Code tun müssen, verwenden Sie GUID. GUID hat eine geringe Wahrscheinlichkeit, dupliziert zu werden.
%Vor% Nicht gegen ein totes Pferd, aber die Verwendung von DateTime.Now
ist besorgniserregender als das, was Sie versuchen. Sie können Ihre Methode umschreiben und das gleiche Ziel viel kürzer erreichen:
Ich würde immer noch empfehlen, einen Guid
über diesen Ansatz zu verwenden. In 99% der Fälle wird die Ticks
-Eigenschaft jedoch bei jedem Aufruf eine andere Nummer geben.
Tags und Links html language-agnostic c# asp.net security