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("کد ملی وارد شده نامعتبر می باشد")]
در کد بالا در صورت نادرست بودن کد ملی خطا مورد نظر را به کاربر نمایش می دهد.
نظر / سوال