ساخت Attribute کد ملی برای صحت آن

جمعه 20 اسفند 1395

با سلام خدمت دوستان امروز برای شما میخواستم ساخت یک Attribute برای کد ملی رو شرح بدم که امیدوارم خوشتون بیاد. با این Attribute می توانید در mvc کد ملی را اعتبار سنجی کنید و از صحت آن با خبر شوید.

سلام دوستان امروز میخوام بهتون ساخت یک Attribute کد ملی رو اموزش بدم چون خودم در اینترنت خیلی گشتم ولی چیز به درد بخوری پیدا نکردم و اومدم با استفاده از کد هایی که برای صحت کد ملی در windows form بود یه Attribute نوشتم به شرح زیر:

اول یه پروژه از نوع mvc ایجاد می کنیم. ترجیحا empty  باشد.

دوم یک فولدر با نام دلخواه بسازید.

سوم یک کلاس با نام دلخواه بسازید ولی در آخر ان کلمه Attribute را قرار دهید.

چهارم کد های زیر را در آن کپی کنید.

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class CodeMelliAttribute : ValidationAttribute
    {
        public CodeMelliAttribute(string ErrorMessage)
            : base()
        {
            this.ErrorMessage = ErrorMessage;
        }

        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();
            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));
        }
    }

و برای استفاده از آن:

[CodeMelli("لطفا کد ملی را بدرستی وارد کنید")]

امیدوارم این کد به دردتون بخوره و در پروژه هاتون اسفاده کنید.

آموزش asp.net mvc

mohammadreza mosalli

نویسنده 1 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید