مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

تغییر تعداد کاراکتر های ارسالی در پیامک Identity

  • شنبه 1 بهمن 1401
  • 22:26
تشکر میکنم

سلام

من از Identity در پروژه هام استفاده میکنم، code که برای تائید ارسال میشه 6 رقمی هست، چجوری میتونم 4 رقمی کنم طول کد تائید ارسالی 

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

علی یوسفی

عضویت از 1400/05/20

  • یکشنبه 2 بهمن 1401
  • 13:14

کد رندوم ۴ رقمی تولید کنید

مثلا

Random.rand(1000,9999)

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 7 بهمن 1401
  • 13:10

سلام، احتراما من سوالمو بد مطرح کردم:

برای جنریت کد من به شکل ذیل عمل کردم

 public string GeneratedCode(string UserId, string Phone)
        {
            var user = UserId;
            var mobile = Phone;
            var time = DateTime.Now;
            var timeIs = time.Hour + ":" + time.Minute;
            var mobileBytes = Encoding.ASCII.GetBytes(mobile);
            var timeByte = Encoding.ASCII.GetBytes(timeIs);
            var SaltBytes = Combine(mobileBytes, timeByte);
            var userBytes = Encoding.ASCII.GetBytes(user);

            var rfc2898DeriveBytes = new Rfc2898DeriveBytes(userBytes, SaltBytes, 10000);
            var hashPassword = Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(128));
            string numericPhone = new String(hashPassword.Where(Char.IsDigit).ToArray());
            string code = numericPhone.Substring(0, 4);
            return code;
        }

این کلاس UserId و Phone رو میگیره و یه Salt میسازه بر اسای phone و ساعت و دقیقه لحظه 

و بعد این salt رو با UserId با هم هش میکنه و از هش کد ایجاد شده 4 رقم که فقط عددی هست رو برمیگردونه

public bool VerifyCode(string UserId, string Phone, string Code)
        {
            var user = UserId;
            var mobile = Phone;
            var time = DateTime.Now;
            var timeIs = time.Hour + ":" + time.Minute;
            var mobileBytes = Encoding.ASCII.GetBytes(mobile);
            var timeByte = Encoding.ASCII.GetBytes(timeIs);
            var SaltBytes = Combine(mobileBytes, timeByte);
            var userBytes = Encoding.ASCII.GetBytes(user);

            var rfc2898DeriveBytes = new Rfc2898DeriveBytes(userBytes, SaltBytes, 10000);
            var hashPassword = Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(128));
            string numericPhone = new String(hashPassword.Where(Char.IsDigit).ToArray());
            string Generatecode = numericPhone.Substring(0, 4);
            if (Code == Generatecode)
                return true;
            else 
                return false;
        }

بعد یه کلاس دیگه برای تائید code ایجاد کردم به شکل بالا، که یه Code هم ورودی بیشتر داره و همون مقدار هارو با Code چک میکنه اگر اوکی باشه true برمی گردونه

در ضمن این کد 4 رقمی فقط برای همون دقیقه ایجاد شده مورد تائیده یعنی اگر یک دقیقه بگذره یه کد دیگه جنریت میشه

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 7 بهمن 1401
  • 13:33

یه کلاس دیگه هم برای combine کردن Byte ها هست که به شکل ذیل  پیاده سازی کردم

 public byte[] Combine(byte[] first, byte[] second)
        {
            byte[] ret = new byte[first.Length + second.Length];
            byte[] PrivateText = Encoding.ASCII.GetBytes("https://fluttertips.ir");
            Buffer.BlockCopy(first, 0, ret, 0, first.Length);
            Buffer.BlockCopy(second, 0, ret, first.Length, second.Length);
            Buffer.BlockCopy(PrivateText, 0, ret, first.Length, PrivateText.Length);
            return ret;
        }
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

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

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)