Skip to content

Instantly share code, notes, and snippets.

@hallaji
Last active August 9, 2017 02:49
Show Gist options
  • Save hallaji/6d8d8f0690c5535cff08 to your computer and use it in GitHub Desktop.
Save hallaji/6d8d8f0690c5535cff08 to your computer and use it in GitHub Desktop.
Iranian National Identifier Validator

Iranian National Identifier Validator

A validator for Iranian (Persian) national identifier or social number

Languages

c#, java, javascript, php

Types

parameter: string (It doesn't support arabic or persian numbers)
return: boolean

By Vahid Hallaji under the MIT license

public static bool isValid(string number)
{
if (!(new Regex(@"^\d{10}$")).IsMatch(number) || (new Regex(@"^(\d)\1{9}$")).IsMatch(number)) {
return false;
}
int sum = 0;
for (int key = 0; key < number.Length - 1; key++) {
sum += (10 - key) * (int)(number[key] - '0');
}
sum %= 11;
int number9 = (int)(number[9] - '0');
return sum < 2 ? sum == number9 : 11 == number9 + sum;
}
public static boolean isValid(String number)
{
if (!number.matches("^\\d{10}$") || number.matches("^(\\d)\\1{9}$")) {
return false;
}
int sum = 0;
for (int key = 0; key < number.length() - 1; key++) {
sum += (10 - key) * Integer.parseInt(number.substring(key, key+1));
}
sum %= 11;
int number9 = Integer.parseInt(number.substring(9, 10));
return sum < 2 ? sum == number9 : 11 == number9 + sum;
}
function isValid(number)
{
number = number.toString();
if (!number.match(/^\d{10}$/) || !!number.match(/^(\d)\1{9}$/)) {
return false;
}
for (var sum = 0, key = 0; key < number.length - 1; key++) {
sum += (10 - key) * parseInt(number[key]);
}
sum %= 11;
return sum < 2 ? sum == parseInt(number[9]) : 11 == parseInt(number[9]) + sum;
}
public static function isValid($number)
{
if (preg_match('/^\d{10}$/', $number) !== 1 || preg_match('/^(\d)\1{9}$/', $number) === 1) {
return false;
}
$sum = array_sum(array_map(function ($key) use ($number) {
return (10 - $key) * $number[$key];
}, range(0, 8))) % 11;
return $sum < 2 ? $sum == $number[9] : 11 == $number[9] + $sum;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment