خلق فريدة من نوعها أبجدية 10-سلسلة الأحرف

StackOverflow https://stackoverflow.com/questions/467444

  •  19-08-2019
  •  | 
  •  

سؤال

أنا أبحث لإنشاء بسيطة قصيرة الأجل نظام الحجز, و أود أن تولد تأكيد الأرقام التي يتم

  • فريدة من نوعها
  • عشوائي المظهر
  • أبجدية
  • قصيرة نوعا ما, على الأقل أقصر بكثير من 32 حرف-سلاسل طويلة وعاد قبل sha1

أنا فقط يبحثون عن ~500 التحفظات حتى لا تخيل ارتفاع احتمالات نظام التحسين.

فكرة واحدة كان هو توليد sha1 تجزئة على أساس التاريخ-التوقيت واسم المستخدم ، ثم اقتطاع أن أول 10 شخصيات.سيكون شيئا مثل أن تكون موثوق فريدة من نوعها بما فيه الكفاية لأغراض المعالجة ~500 التحفظات ؟

هل كانت مفيدة؟

المحلول

ينبغي أن يكون هناك أي اختلاف في العشوائية من أي نوعا من التجزئة SHA-1 ، حتى أن هذا ممكن.طريقة أخرى سيكون أضعاف التجزئة في نفسه باستخدام XOR حتى يكون لديك 60 بت يستحق من البيانات ، ثم ترميز باستخدام قاعدة 64 للحصول على الغالب الرقمية ألفا النتيجة.

هذا ضروري فقط إذا كنت تريد أن تكون قادرة على توليد نفس معرف مرارا وتكرارا لنفس إدخال البيانات.وإلا إذا عشوائي معرف أن تولد مرة و التمسك بعد ذلك استخدام أندرس' الاقتراح.إذا كنت تحصل على الصراع تولد مجرد واحد آخر.

نصائح أخرى

يمكنك استخدام أيا كان ، حتى سهل عشوائية عدد المولدات ؛ ومع ذلك ، يجب التحقق من أن رمز الحجز ليست موجودة بالفعل.إذا كان هذا هو الحال ، إضافة الأحرف ("x") إلى سلسلة (تاريخ+المستخدم) حتى تحصل على عشوائية جديدة/sha1/الخ.

أنا فقط يبحثون عن ~500 التحفظات لذا لا تتخيل ارتفاع احتمالات نظام التحسين.

آخر فكرة غبية:توليد 1000 أو 2000 فريدة من نوعها أرقام عشوائية مع الخصائص المطلوبة وتخزينها في مكان ما ، وتعيينها إلى المستخدمين للتسجيل :)

هنا طريقة واحدة للقيام بذلك في بيرل:

sub get_random_name()
{
  my @chars=('a'..'z','A'..'Z');
  my $random_string;

foreach (1..22) { # راند @حرف توليد عشوائي # عدد بين 0 و العددية @حرف $random_string .= $حرف[راند @حرف];} عودة $random_string ."-" .الوقت();}

أنا لا أتذكر كم مرة () ، لذلك قد تضطر إلى ضبط عدد لتناسب طول.يمكنك أيضا إزالة هذا الجزء إذا كنت لا تحتاج إليها.

إذا كان حقا فقط 500, ثم قبل تولد من 20 ، 000 منهم في الجدول ، ثم الحصول على "التالي المستخدمة واحدة" عندما كنت في حاجة إليها.

بعض النصائح الجيدة حول هذا السؤال: كيف يمكنني إنشاء عشوائي الرقمية ألفا السلسلة في C++?

وأود أن تجنب بما في ذلك شخصيات مثل "1", "l", و "س", "0" و "5", "ق" و "ض", "2" في سلسلة الخاص بك ، جعل من السهل على العملاء عندما تحتاج إلى قراءة رمز الحجز عبر الهاتف.الخوارزمية التي قدمت في هذا الرابط ينبغي أن تساعدك على القيام بذلك.

استخدام guid?16 حرفا ، على الرغم من إذا كنت حقا لا أهتم الاصطدام ، هل يمكن أن مجرد اختيار الأولى من الأحرف ن.

في C# يمكنك استخدام http://www.dotnetfunda.com/forums/thread1357-how-do-generate-unique-alpha-numeric-random-number-in-aspnet.aspx (سوبر طريقة سهلة يقولون)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top