验证以色列身份证号码
Validating Israeli ID number
我正在寻找一种简洁高效的方法来验证以色列身份证号码。
它基本上是 Luhn algorithm 在 9 位数字上的实现。
注:
这个问题是针对社区的,因为它还没有出现堆栈溢出。
您可以添加不同编码语言的答案。
这是在 C# 中实现它的有效方法 (link):
public static bool IsValidIsraeliID(string israeliID)
{
if (israeliID.Length != 9)
return false;
long sum = 0;
for (int i = 0; i < israeliID.Length; i++)
{
var digit = israeliID[israeliID.Length - 1 - i] - '0';
sum += (i % 2 != 0) ? GetDouble(digit) : digit;
}
return sum % 10 == 0;
int GetDouble(long i)
{
switch (i)
{
case 0: return 0;
case 1: return 2;
case 2: return 4;
case 3: return 6;
case 4: return 8;
case 5: return 1;
case 6: return 3;
case 7: return 5;
case 8: return 7;
case 9: return 9;
default: return 0;
}
}
}
我正在寻找一种简洁高效的方法来验证以色列身份证号码。
它基本上是 Luhn algorithm 在 9 位数字上的实现。
注: 这个问题是针对社区的,因为它还没有出现堆栈溢出。 您可以添加不同编码语言的答案。
这是在 C# 中实现它的有效方法 (link):
public static bool IsValidIsraeliID(string israeliID)
{
if (israeliID.Length != 9)
return false;
long sum = 0;
for (int i = 0; i < israeliID.Length; i++)
{
var digit = israeliID[israeliID.Length - 1 - i] - '0';
sum += (i % 2 != 0) ? GetDouble(digit) : digit;
}
return sum % 10 == 0;
int GetDouble(long i)
{
switch (i)
{
case 0: return 0;
case 1: return 2;
case 2: return 4;
case 3: return 6;
case 4: return 8;
case 5: return 1;
case 6: return 3;
case 7: return 5;
case 8: return 7;
case 9: return 9;
default: return 0;
}
}
}