Unity实现验证身份证是否合法
来源:互联网 发布:西安交通大学软件学院 编辑:程序博客网 时间:2024/03/29 23:41
由于国家的相关法律法规,现在的网络游戏要进行实名制认证,当然认证的话肯定是找公安局的接口查询了,查询身份证和姓名,合法之后存储到数据库当中备用,但是调用这个接口是收费的,而且游戏面对很多玩家,他们怎么想的你一个做程序的肯定不知道,玩意给你乱输入,或者输入错的你还要去调用接口么?当然不能,我们需要先在前端进行验证,验证他身份证是否合法,验证的方法也很简单,中国居民的身份证都是唯一的,因为有一个独特的计算公式,这个公式也可以计算你的身份证是否合法,我们就利用这个公式先在前端进行计算,只有通过之后才进行下一步。
公式也很简单:
校验的计算方式:
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
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("身份证填写错误"); 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这个方法给按钮的点击事件
第三步:
运行检测身份证是否合法
每次检测都会输出是否合法,当然可能有更简单的方法,方法很多,看你怎么去验证,验证通过之后调用接口再次验证姓名是否相符,这样你的实名认证就大功告成了!
方法很多,我这个不是最简便的,如果哪位有更简单的方法,欢迎私聊讨论,大神勿喷,后辈献丑了!
阅读全文
0 0
- Unity实现验证身份证是否合法
- ios验证身份证是否合法
- ios验证身份证是否合法
- Java验证身份证是否合法
- 验证身份证是否合法
- 验证身份证是否合法
- 验证身份证是否合法
- java验证身份证是否合法
- Java验证身份证是否合法
- JAVA后台验证身份证是否合法
- oracle自定义函数验证身份证是否合法
- 验证身份证是否合法的c#代码
- c++实现身份证是否合法判断函数
- java实现验证身份证号是否合法
- javascript实现身份证验证
- C#实现身份证验证
- JAVA 实现身份证验证
- java实现身份证验证
- Selenium Python自动化测试学习知识积累-unittest
- File "scripts/rule_bison.py", line 75, in <module>
- ConcurrentHashMap 无锁读
- 栈的顺序存储的实现与操作
- 三分钟搭建mongodb伪副本集
- Unity实现验证身份证是否合法
- 补充:批量下载百度贴吧图片Demo
- Map 遍历的四种方法
- For 企业应用案例
- 负载测试、压力测试和性能测试的区别
- 简单算法习题--设置首字母大写
- 菜鸟学Java(二十三)——Java内存分析
- 弹幕框架
- java内存问题