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

也就是说校验之后的数字除以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这个方法给按钮的点击事件
第三步:
运行检测身份证是否合法

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

方法很多,我这个不是最简便的,如果哪位有更简单的方法,欢迎私聊讨论,大神勿喷,后辈献丑了!