نمایش نتایج 1 تا 7 از 7

نام تاپیک: کد شش رقمی غیر تکراری برای بازیابی رمز

  1. #1
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    2,022

    کد شش کاراکتری غیر تکراری برای بازیابی رمز

    سلام.

    من برای بازیابی رمز تابعی برای ایجاد یک کد شش کاراکتری متغیر ساختم که متشکل از ارقام 6 فروند GUID هست که با چرحش در حلقه 6 دوره هربار یک کاراکتر از یک GUID از 12 کاراکتر GUID به یک لیست اضافه می کنه که در نهایت می شه یک کد شش کاراکتری غیر تکراری

    اگر راهکاری برای بهتر شدن این تابع دارید اعلام بفرمائید.

    با تشکر .....

    SharedScreenshot13.jpg

    Function CreateNewRecoveryCode() As String
    Dim TempIDs As New List(Of String)
    Dim Guids As Guid() = {Guid.NewGuid, Guid.NewGuid, Guid.NewGuid, Guid.NewGuid, Guid.NewGuid, Guid.NewGuid}
    Dim X, I As Byte
    X = 0 : I = 0
    For Each G As Guid In Guids
    X += 1
    Select Case X
    Case 1 : I = 9
    Case 2 : I = 8
    Case 3 : I = 11
    Case 4 : I = 5
    Case 5 : I = 1
    Case 6 : I = 4
    End Select
    TempIDs.Add(G.ToString.Replace("-", "").Substring(I, 1).ToUpper)
    Next
    Return Join(TempIDs.ToArray).Replace(Space(1), String.Empty)
    End Function
    آخرین ویرایش به وسیله ROSTAM2 : پنج شنبه 04 مرداد 1403 در 10:20 صبح

  2. #2
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    2,022

    نقل قول: کد شش کاراکتری غیر تکراری برای بازیابی رمز

    اینم هست:

    Function CreateNewRecoveryCode2() As String
    Dim TempIDs As New List(Of String)
    Dim G As Guid = Guid.NewGuid
    Dim I As Byte
    I = 0
    For X = 1 To 6
    Select Case X
    Case 1 : I = 9
    Case 2 : I = 8
    Case 3 : I = 11
    Case 4 : I = 5
    Case 5 : I = 1
    Case 6 : I = 4
    End Select
    TempIDs.Add(G.ToString.Replace("-", "").Substring(I, 1).ToUpper)
    Next
    Return Join(TempIDs.ToArray).Replace(Space(1), String.Empty)
    End Function
    آخرین ویرایش به وسیله ROSTAM2 : پنج شنبه 04 مرداد 1403 در 10:20 صبح

  3. #3
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    2,022

    نقل قول: کد شش رقمی غیر تکراری برای بازیابی رمز

    آخرین تغییرات:


    Function CreateNewRecoveryCode() As String
    Dim Expr$ = "", StringGUID$
    Dim G As Guid = Guid.NewGuid
    StringGUID = G.ToString.Replace("-", "").ToUpper
    Dim I As Byte
    I = 0
    For X = 1 To 8
    Select Case X
    Case 1 : I = 9
    Case 2 : I = 8
    Case 3 : I = 11
    Case 4 : I = 5
    Case 5 : I = 1
    Case 6 : I = 4
    Case 7 : I = 7
    Case 8 : I = 3
    End Select
    Expr += StringGUID.Substring(I, 1)
    Next
    Return Expr
    End Function


    Aparat Logo.jpg

    ساخت کد تأیید پست الکترونیک یا کد بازیابی رمز

    فراهم سازی امنیت کد تأئید پست الکترونیک /کد بازیابی رمز

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,684

    نقل قول: کد شش رقمی غیر تکراری برای بازیابی رمز

    یک راه هم این هست که یک char array از A-Z و 0-9 بسازیم
    و اون رو random مرتب کنیم
    و 6 تاش رو برداریم:

    Private rx As Random = New Random()

    Function CreateNewRecoveryCode() As String
    Dim digits = Enumerable.Range(AscW("0"c), 10).Select(Function(x) ChrW(x))
    Dim alphas = Enumerable.Range(AscW("A"c), 26).Select(Function(x) ChrW(x))

    Return digits.Concat(alphas).OrderBy(Function(x) rx.Next).Take(6).ToArray
    End Function


    من اینجا برای راحتی با enumerable.range این لیست A-Z و 0-9 رو ساختم.

  5. #5
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    2,022

    نقل قول: کد شش رقمی غیر تکراری برای بازیابی رمز

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    یک راه هم این هست که یک char array از A-Z و 0-9 بسازیم
    و اون رو random مرتب کنیم
    و 6 تاش رو برداریم:

    Private rx As Random = New Random()

    Function CreateNewRecoveryCode() As String
    Dim digits = Enumerable.Range(AscW("0"c), 10).Select(Function(x) ChrW(x))
    Dim alphas = Enumerable.Range(AscW("A"c), 26).Select(Function(x) ChrW(x))

    Return digits.Concat(alphas).OrderBy(Function(x) rx.Next).Take(6).ToArray
    End Function


    من اینجا برای راحتی با enumerable.range این لیست A-Z و 0-9 رو ساختم.
    سلام.

    من از Random دستورت خوشم اومد:


    Function CreateNewRecoveryCode() As String
    Dim Expr$ = "", StringGUID$
    Dim G As Guid = Guid.NewGuid
    Static R As New Random
    StringGUID = G.ToString.Replace("-", "").ToUpper
    Do Until Expr.Length = 8
    Expr += StringGUID(R.Next(12))
    Loop
    Return Expr
    End Function
    آخرین ویرایش به وسیله ROSTAM2 : پنج شنبه 04 مرداد 1403 در 22:37 عصر

  6. #6
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,684

    نقل قول: کد شش رقمی غیر تکراری برای بازیابی رمز

    خب تصور من این بود که این کد ساخته شده نباید کاراکتر تکراری داشته باشه.

    اگر عدم تکرار به خود کد برمیگرده درسته که guid ساخته شده یکتا هست،
    ولی انتخاب یک تعدادی از کاراکترهای اون (و نه خود guid) الزاما کد یکتا نمیسازه،
    هر چقدر هم که پروسه انتخاب این مثلا 6 یا 8 کاراکتر رندوم باشه.

    برای همین انتخاب 6 یا 8 کاراکتر اول یا آخر یا وسط یا کلا هر ترکیب دیگه ای همونقدر شانس یکتا بودن داره که رندوم انتخاب بشه،
    و این کل انتخاب رندوم رو بی فایده میکنه و میشه اون رو کنار گذاشت:
    Function CreateNewRecoveryCode() As String
    Dim G As Guid = Guid.NewGuid
    Return G.ToString.Replace("-", "").ToUpper.Substring(1, 8)
    End Function


    اگر یکتا بودن این کد باید گارانتی بشه کل guid رو باید استفاده کنین و نه بخشی از اون.

    مورد دیگه ای هم هست:
    چون guid وقتی به string تبدیل میشه نمایشی از کد هگزادسیمال هست،
    فقط حروف A تا F در کد ساخته شده میاد و این احتمال کد تکراری رو باز هم افزایش میده (در مقایسه با A تا Z).

  7. #7

    نقل قول: کد شش رقمی غیر تکراری برای بازیابی رمز

    یکتا بودن زمانی مطرحه که طول رشته محدودیت نداشته باشه.
    guid برای این کار مناسب نیست.

    برای هر کد تولید شده چند مولفه در نظر بگیرید. شامل استفاده توسط همان شخص درخواست کننده، زمان انقضاء(چند دقیقه) و همچنین یک دوره زمانی(چند روز) که بعد از اون بشه مجدد از کد استفاده کرد.

تاپیک های مشابه

  1. پاسخ: 3
    آخرین پست: شنبه 03 بهمن 1394, 12:38 عصر
  2. پاسخ: 3
    آخرین پست: جمعه 31 مرداد 1393, 23:22 عصر
  3. سوال: رمز کردن فایل ها به فرمت غیر قابل خواندن و بازیابی آنها
    نوشته شده توسط minaalamshahi در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: سه شنبه 28 خرداد 1392, 21:44 عصر
  4. سوال: غیرفعال کردن زیرمنو در menustrip
    نوشته شده توسط veniz2008 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: شنبه 27 خرداد 1391, 20:19 عصر
  5. سوال: غیرفعال کردن یکی از زیرمنوهای menustrip
    نوشته شده توسط veniz2008 در بخش VB.NET
    پاسخ: 1
    آخرین پست: شنبه 27 خرداد 1391, 20:07 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •