有人可以帮助我了解沙特 iqama/国民身份证号码的现场验证标准吗?
我知道对于国民来说,它应该从 1 开始,对于外籍人士来说,它应该从 2 开始,长度应该是 10。其他的。这是针对已经看到一些不良传入数据创建错误的应用程序,因此不想冒险。提前致谢。
对于 (Id Type='National Id') ✓ 长度 = 10 ,身份证号码必须以位置 1 中的“1”开头。将奇数位置中的每个数字(位置 1,3,5..9 中的字符)乘以 2如果乘法产生一个 2 位数字,则将这 2 位数字相加得到一个数字。对 ID 号的前 9 个字符求和(乘法后)以生成 2 位数字 (XY)。如果身份证号码的第10位数字等于“零”,则将前9个字符的总和中第2位的数字(Y)减去10,得到2位数字(ZN),(N)应等于ID 号的第 10 位数字。否则,ID 号码的第 10 位数字应等于 10 减去前 9 个字符的总和中位置 2 (Y) 的数字。
Saudi ID Number – 1058529940
Position 1 2 3 4 5 6 7 8 9 10
ID Nbr 1 0 5 8 5 2 9 9 4 0
Multiply 2 0 1 8 1 2 9 9 8
Summate 40
验证位置 10(值 0)= 10 – 数字 2
求和总数 (0) = 减法的位数 2
例如身份证号码 = 1001244019
Position 1 2 3 4 5 6 7 8 9 10
ID Nbr 1 0 0 1 2 4 4 0 1 9
Multiply 2 0 0 1 4 4 8 0 2
Summate 21
验证位置 10(值 9)= 10 – 数字 2
总和 (1)
尝试使用正则表达式进行验证。
^[1|2]{1}[0-9]{9}$
这对我有用。
或者如果您正在寻找检查 ID 是否正确的代码,请检查此 GitHub 存储库:https://github.com/alhazmy13/Saudi-ID-Validator。它是用不同的编程语言编写的,它会检查国民身份证和居住身份证
瓦利德的两个答案似乎是正确的。我会重新表述一下。
沙特国民身份证必须正好是 10 位数字。第一个数字必须是 0 或 1。这可以通过简单的正则表达式来实现
^[1|2]{1}[0-9]{9}$
ID的第1/3/5/7/9位数字:
对于 ID 的第 1、3、5、7、9 位数字,分别乘以 2,如果答案是个位数,则将其与总和相加。否则,如果答案是两位数,则将它们加在一起,然后将其添加到总和中。
例子:如果ID的第5位是3,那么3x2=6,所以我们加6。
例子:如果ID的第5位是8,那么8x2=16,所以1+6=7,所以我们加7。
ID第2/4/6/8位数字:
对于每个ID的第2、4、6、8位数字,我们直接将它们相加。
ID第10位:
对于ID的第10位,它仅用作验证,因此不会添加到总和中。
根据 ID 的第 10 位数字验证总和:
我们通过说
10 - sum's_2nd_digit = new_number
来计算
ID 的第 10 位非零示例:
sum = 21 // we take sum's 2nd digit, which is 1
ID's 10th digit = 9
10 - sum's_2nd_digit = new_number
10-1 = 9 // is this new_number equals to ID's 10th digit? If yes then it's valid ID
ID 的第 10 位数字为零的示例:
sum = 40 // we take sum's 2nd digit, which is 0
ID's 10th digit = 0
10 - sum's_2nd_digit = new_number
10-0 = 10 // new_number, is new_number's_2nd_digit equals to ID's 10th digit? If yes then it's valid ID