بررسی صحت کد ملی با Custom Attribute در MVC
1 0

بررسی صحت کد ملی با Custom Attribute در MVC


بررسی صحت کد ملی با Custom Attribute در MVC

در این پست قصد داریم تا یک Custom Attribute ایجاد تا صحت کد ملی را بررسی و در صورت نادرست بودن خطای نامعتبر بودن کد ملی را به کاربر نمایش دهد.

اگر پوشه به نام Helpers در پروژه خود دارید داخل آن یک پوشه به نام Attributes ایجاد کنید در غیر این صورت دو پوشه فوق را در پروژه خود ایجاد کنید.

سپس یک کلاس به نام CustomAttribute داخل آن ایجاد کنید و سپس کدهای زیر را به آن اضافه کنید.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;

namespace MyMVC.Helpers.Filters
{
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class CodeMelliAttribute : ValidationAttribute
    {
        #region IsValidNationalCode بررسی صحت کدملی

        public CodeMelliAttribute(string ErrorMessage)
            : base()
        {
            this.ErrorMessage = ErrorMessage;
        }

        //public override bool IsValid(object value)
        //{
        //    if (value == null) return new ValidationResult(ErrorMessage);
        //    if (!Utility.IsValidNationalCode(value.ToString())) return new ValidationResult(ErrorMessage);
        //    return ValidationResult.Success;
        //}
        public override bool IsValid(object value)
        {
            if (value == null) return false;
            if (IsValidNationalCode(value.ToString()) == false) return false;
            return true;
        }
        public bool IsValidNationalCode(string nationalcode)
        {
            if (string.IsNullOrEmpty(nationalcode)) return false;
            if (!new Regex(@"\d{10}").IsMatch(nationalcode)) return false;
            var array = nationalcode.ToCharArray();
            //if (array.Length != 10) return false;
            //for (int i = 0; i < array.Length; i++)
            //{
            //    if (!char.IsDigit(array[i])) return false;
            //}
            var allDigitEqual = new[] { "0000000000", "1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999" };
            if (allDigitEqual.Contains(nationalcode)) return false;
            var j = 10;
            var sum = 0;
            for (var i = 0; i < array.Length - 1; i++)
            {
                sum += Int32.Parse(array[i].ToString(CultureInfo.InvariantCulture)) * j;
                j--;
            }
            var div = sum / 11;
            var r = div * 11;
            var diff = Math.Abs(sum - r);
            if (diff <= 2)
            {
                return diff == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
            }
            var temp = Math.Abs(diff - 11);
            return temp == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
        }
        #endregion
    }
}

نحوه استفاده از اتربیوت کدملی

حال برای استفاده از این اتربیوت به مدلی که در آن فیلد کدملی را دارید در بالای آن کد زیر را اضافه کنید.

[CodeMelli("کد ملی وارد شده نامعتبر می باشد")]

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

دانلود

نویسنده حسین فتحی
گروه مطلب MVC
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۱۳ مهر ۱۳۹۵
منبع ایران گنج
تعداد نظرات ۰
قیمت کاربران مهمان
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

نظر / سوال

Captcha

این صفحه را می‌پسندم