您的位置:首页 > 移动开发 > Unity3D

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内建立一个文本框,用于输出验证结果,建立一个输入框,让用户输入身份证号,还有一个按钮,给用户查询
第二步:
写脚本,脚本代码如下
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这个方法给按钮的点击事件
第三步:
运行检测身份证是否合法

每次检测都会输出是否合法,当然可能有更简单的方法,方法很多,看你怎么去验证,验证通过之后调用接口再次验证姓名是否相符,这样你的实名认证就大功告成了!

方法很多,我这个不是最简便的,如果哪位有更简单的方法,欢迎私聊讨论,大神勿喷,后辈献丑了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: