Unity实现验证身份证是否合法
2017-11-21 16:53
981 查看
由于国家的相关法律法规,现在的网络游戏要进行实名制认证,当然认证的话肯定是找公安局的接口查询了,查询身份证和姓名,合法之后存储到数据库当中备用,但是调用这个接口是收费的,而且游戏面对很多玩家,他们怎么想的你一个做程序的肯定不知道,玩意给你乱输入,或者输入错的你还要去调用接口么?当然不能,我们需要先在前端进行验证,验证他身份证是否合法,验证的方法也很简单,中国居民的身份证都是唯一的,因为有一个独特的计算公式,这个公式也可以计算你的身份证是否合法,我们就利用这个公式先在前端进行计算,只有通过之后才进行下一步。
公式也很简单:
校验的计算方式:
1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. 以11对计算结果取模
Y = mod(S, 11)
3. 根据模的值得到对应的校验码
对应关系为:
Y值: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
也就是说校验之后的数字除以11得到的十个数字,取其余数只能为10个值 分别是 0 1 2 3 4 5 6 7 8 9 10 这十个数字分别对应着1 0 X 9 8 7 6 5 4 3 2 如果最后一位数和这十位数相等,代表着你的身份证号码就合法了!
话不多说,实战最重要。下面进行实战:
第一步:
在unity内建立一个文本框,用于输出验证结果,建立一个输入框,让用户输入身份证号,还有一个按钮,给用户查询
第二步:
写脚本,脚本代码如下
行数有点多,验证的也多Verification这个方法给按钮的点击事件
第三步:
运行检测身份证是否合法
每次检测都会输出是否合法,当然可能有更简单的方法,方法很多,看你怎么去验证,验证通过之后调用接口再次验证姓名是否相符,这样你的实名认证就大功告成了!
方法很多,我这个不是最简便的,如果哪位有更简单的方法,欢迎私聊讨论,大神勿喷,后辈献丑了!
公式也很简单:
校验的计算方式:
1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. 以11对计算结果取模
Y = mod(S, 11)
3. 根据模的值得到对应的校验码
对应关系为:
Y值: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
也就是说校验之后的数字除以11得到的十个数字,取其余数只能为10个值 分别是 0 1 2 3 4 5 6 7 8 9 10 这十个数字分别对应着1 0 X 9 8 7 6 5 4 3 2 如果最后一位数和这十位数相等,代表着你的身份证号码就合法了!
话不多说,实战最重要。下面进行实战:
第一步:
在unity内建立一个文本框,用于输出验证结果,建立一个输入框,让用户输入身份证号,还有一个按钮,给用户查询
第二步:
写脚本,脚本代码如下
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.Text.RegularExpressions; /// <summary> /// 验证身份证是否合法 /// </summary> public class IdCard : MonoBehaviour { public Text Output; //成功失败的回调 public Text Input; //用户输入的身份证号码 private string ID; //点击按钮之后验证 public void Verification() { //将用户输入的身份证号码赋值到string类型的值上去 ID = Input.text.ToString(); if (ID.Length == 18) { //基本验证位数18位已经通过执行拆分方法 Resolution(); } else { //基本验证没有通过,位数多或者少,不合法 //Debug.Log("身份证验证位数不通过"); Output.text = "身份证验证不通过,原因:身份证位数不够!"; } } //基本位数验证通过之后开始拆分计算 void Resolution() { //将所输入的身份证号码进行拆分,拆分为17位,最后一位留着待用 int Num0 = int.Parse(ID.Substring(0, 1)) * 7; int Num1 = int.Parse(ID.Substring(1, 1)) * 9; int Num2 = int.Parse(ID.Substring(2, 1)) * 10; int Num3 = int.Parse(ID.Substring(3, 1)) * 5; int Num4 = int.Parse(ID.Substring(4, 1)) * 8; int Num5 = int.Parse(ID.Substring(5, 1)) * 4; int Num6 = int.Parse(ID.Substring(6, 1)) * 2; int Num7 = int.Parse(ID.Substring(7, 1)) * 1; int Num8 = int.Parse(ID.Substring(8, 1)) * 6; int Num9 = int.Parse(ID.Substring(9, 1)) * 3; int Num10 = int.Parse(ID.Substring(10, 1)) * 7; int Num11 = int.Parse(ID.Substring(11, 1)) * 9; int Num12 = int.Parse(ID.Substring(12, 1)) * 10; int Num13 = int.Parse(ID.Substring(13, 1)) * 5; int Num14 = int.Parse(ID.Substring(14, 1)) * 8; int Num15 = int.Parse(ID.Substring(15, 1)) * 4; int Num16 = int.Parse(ID.Substring(16, 1)) * 2; int allNum = Num0 + Num1 + Num2 + Num3 + Num4 + Num5 + Num6 + Num7 + Num8 + Num9 + Num10 + Num11 + Num12 + Num13 + Num14 + Num15 + Num16; Judge(allNum,ID.Substring(17, 1)); } /// <summary> /// 计算身份证号码是否合法 /// </summary> /// <param 前17位相加之和="allNum"></param> /// <param 身份证号码最后一位="LastNum"></param> void Judge(int allNum,string LastNum) { int Remainder = allNum % 11; //如果最后一位数不是X的时候将最后一位数转换为int if (Remainder == 0) { if (int.Parse(LastNum)==1) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填 b62c 写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 1) { if (int.Parse(LastNum) == 0) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 2) { Debug.Log("最后一位数是X"); if (LastNum != "x" && LastNum != "X") { Debug.Log(LastNum); Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } else { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } } if (Remainder==3) { if (int.Parse(LastNum) == 9) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 4) { if (int.Parse(LastNum) == 8) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 5) { if (int.Parse(LastNum) == 7) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 6) { if (int.Parse(LastNum) == 6) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 7) { if (int.Parse(LastNum) == 5) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 8) { if (int.Parse(LastNum) == 4) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 9) { if (int.Parse(LastNum) == 3) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } if (Remainder == 10) { if (int.Parse(LastNum) == 2) { Debug.Log("身份证合法,已经通过验证"); Output.text = "恭喜验证通过"; } else { Debug.Log("身份证填写错误"); Output.text = "您的身份证号不码合法"; } } } }
行数有点多,验证的也多Verification这个方法给按钮的点击事件
第三步:
运行检测身份证是否合法
每次检测都会输出是否合法,当然可能有更简单的方法,方法很多,看你怎么去验证,验证通过之后调用接口再次验证姓名是否相符,这样你的实名认证就大功告成了!
方法很多,我这个不是最简便的,如果哪位有更简单的方法,欢迎私聊讨论,大神勿喷,后辈献丑了!
相关文章推荐
- java实现验证身份证号是否合法
- C#实现验证身份证是否合法的方法
- AJAX+jQuery+ASP实现实时验证身份证信息是否已存在---人事系统
- 验证身份证号是否合法的小程序(正则表达式)
- C语言身份证信息查询系统(可验证输入身份证是否合法)
- JavaScript验证18位或者15位身份证号码是否合法
- JAVA后台验证身份证是否合法
- AJAX+jQuery+ASP实现实时验证身份证信息是否已存在---人事系统
- 第三十七篇:JAVA验证身份证号是否合法
- c++实现身份证是否合法判断函数
- JavaScript验证18位或者15位身份证号码是否合法
- java验证身份证是否合法
- Java验证身份证是否合法
- 验证身份证是否合法
- javascript或asp实现的判断身份证号码是否正确两种验证方法
- 验证身份证号是否合法JS
- AJAX和WebService实现邮箱验证(无刷新验证邮件地址是否合法)
- oracle自定义函数验证身份证是否合法
- Java 银行卡和身份证号根据校验位验证是否合法
- 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法