اگر کارتهای ملی که شمارهٔ شناسنامهٔ ۹ و ۸ رقمی دارند را دیده باشید متوجه میشوید که صفرهای اول جز شمارهٔ ملی است. به هر حال اگر به هر دلیل صفرهای اول را به گونهای پاککردهاید میتوان کد را اینگونه نوشت که کدهای ۹ یا ۸ رفمی را پس از افزودهشدن صفر مانند کدهای ۱۰ رقمی صحتسنجی کند:
راستی اعداد یکسان نامعتبر نیست: http://www.fardanews.com/fa/news/127747
public static bool IsValidIranianNationalCode(string input) { input = input.PadLeft(10, '0'); if (!Regex.IsMatch(input, @"^\d{10}$")) return false; var check = Convert.ToInt32(input.Substring(9, 1)); var sum = Enumerable.Range(0, 9) .Select(x => Convert.ToInt32(input.Substring(x, 1)) * (10 - x)) .Sum() % 11; return sum < 2 && check == sum || sum >= 2 && check + sum == 11; }
برای زبانهای دیگر این کد https://gist.github.com/ebraminio/5292017