IsValidIranianSocialCode

 public static bool IsValidIranianSocialCode( this string codeMelli )
        {

            switch ( codeMelli )
            {
                case "1111111111":
                case "2222222222":
                case "3333333333":
                case "4444444444":
                case "5555555555":
                case "6666666666":
                case "7777777777":
                case "8888888888":
                case "9999999999":
                case "0000000000":
                return false;
            }

            long result;
            if ( long.TryParse(codeMelli, out result) )
            {
                switch ( result.NoOfDigits() )
                {
                    // because in some cases user ignore the two starting zeros
                    case 8:
                    long.TryParse((string.Concat("00", result.ToString())), out result);
                    return result.CheckValidity();




                    // because in some cases user ignore the first starting zero
                    case 9:
                    long.TryParse((string.Concat("0", result.ToString())), out result);
                    return result.CheckValidity();




                    case 10:
                    return result.CheckValidity();

                    default: // below 8 digits is not valid Social No. Code
                    return false;



                }
            }
            else return false;

        }

        public static int NoOfDigits( this long input )
        {
            return input.ToString().Length;
        }
        public static bool CheckValidity( this long socialCode )
        {

            char[] splitSocialCode = socialCode.ToString().ToCharArray();
            int sum = 0;
            for ( int i = 0, j = 10; i < 9 & j > 1; sum += int.Parse(splitSocialCode[i++].ToString()) * j-- ) ;
            int reminder = sum % 11;
            if ( reminder < 2 )
                return reminder == int.Parse(splitSocialCode[9].ToString()); // controlling digit
            else
                return (11 - reminder) == int.Parse(splitSocialCode[9].ToString());

        }
Example:
 Console.WriteLine("2300060647".IsValidIranianSocialCode()); // true
            Console.WriteLine("2300060648".IsValidIranianSocialCode()); //false
            Console.WriteLine("2222222222".IsValidIranianSocialCode()); //false

Description

بررسی اعتبار کد ملی

Details

Double click on the code to select all.

 

;