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

نام تاپیک: RegularExpression , AllowEmptyStrings کد ملی

  1. #1

    RegularExpression , AllowEmptyStrings کد ملی

    سلام
    من فیلد زیر را تعریف کرده ام
    public string NationalId { get; set; }


    حال می خواهم
    که حتما عدد باشه(بهتر قانون کدملی را هم چک کند)و همجنین 10 عدد باشد یا خالی باشد
    چگونه باید DataAnnotations برایش تعریف کنم باتشکر

  2. #2

    نقل قول: RegularExpression , AllowEmptyStrings کد ملی

    باید یه کلاس تعریف کنین که از کلاس ValidationAttribute ارث بری داشته باشه و به این صورت کدهارو بنویسین:
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class NationalCodeAttribute : ValidationAttribute
    {
    public override bool IsValid(object value)
    {
    if (value == null)
    return false;

    return IsValidNationalCode(value.ToString());
    }

    public bool IsValidNationalCode(string nationalCode)
    {
    //در صورتی که کد ملی وارد شده تهی باشد
    if (String.IsNullOrEmpty(nationalCode))
    return false;

    //در صورتی که کد ملی وارد شده طولش کمتر از 10 رقم باشد
    if (nationalCode.Length != 10)
    return false;

    //در صورتی که کد ملی ده رقم عددی نباشد
    var regex = new Regex(@"\d{10}");
    if (!regex.IsMatch(nationalCode))
    return false;
    //throw new Exception("کد ملی تشکیل شده از ده رقم عددی می‌باشد؛ لطفا کد ملی را صحیح وارد نمایید");

    //در صورتی که رقم‌های کد ملی وارد شده یکسان باشد
    var allDigitEqual = new[] { "0000000000", "1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999" };
    if (allDigitEqual.Contains(nationalCode))
    return false;

    var chArray = nationalCode.ToCharArray();
    var num0 = Convert.ToInt32(chArray[0].ToString()) * 10;
    var num2 = Convert.ToInt32(chArray[1].ToString()) * 9;
    var num3 = Convert.ToInt32(chArray[2].ToString()) * 8;
    var num4 = Convert.ToInt32(chArray[3].ToString()) * 7;
    var num5 = Convert.ToInt32(chArray[4].ToString()) * 6;
    var num6 = Convert.ToInt32(chArray[5].ToString()) * 5;
    var num7 = Convert.ToInt32(chArray[6].ToString()) * 4;
    var num8 = Convert.ToInt32(chArray[7].ToString()) * 3;
    var num9 = Convert.ToInt32(chArray[8].ToString()) * 2;
    var a = Convert.ToInt32(chArray[9].ToString());

    var b = (((((((num0 + num2) + num3) + num4) + num5) + num6) + num7) + num8) + num9;
    var c = b % 11;

    return (((c < 2) && (a == c)) || ((c >= 2) && ((11 - c) == a)));
    }
    }


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

  1. كسي روش يا برنامه چك كردن كد ملي را دارد؟
    نوشته شده توسط ali_abbasi22145 در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 16
    آخرین پست: پنج شنبه 17 فروردین 1391, 19:44 عصر
  2. سوال: بدست آوردن کد ملی توسط فرمول
    نوشته شده توسط arman_Delta2002 در بخش VB.NET
    پاسخ: 2
    آخرین پست: چهارشنبه 22 تیر 1390, 02:20 صبح
  3. سوال: اکتیو ایکس چکر کد ملی
    نوشته شده توسط hbahjat در بخش برنامه نویسی در 6 VB
    پاسخ: 13
    آخرین پست: شنبه 12 بهمن 1387, 08:50 صبح
  4. سوال: اشكال در وارد كردن اعداد با خط فاصله مثل كد ملي
    نوشته شده توسط safasoft در بخش VB.NET
    پاسخ: 3
    آخرین پست: سه شنبه 16 مهر 1387, 18:20 عصر
  5. در مورد کد ملی
    نوشته شده توسط mshabani در بخش Access
    پاسخ: 6
    آخرین پست: جمعه 21 تیر 1387, 21:53 عصر

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

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