IOS 身份证校验详细介绍及示例代码

IOS身份证校验详细介绍及示例代码

身份证号作为民族国家的一种重要证件,身份证号检验非常重要。本文详细介绍了IOS平台上如何对身份证号进行校验,以及提供了两个示例代码以供参考。

一、身份证号规则

根据我国国家标准GB11643-1999《公民身份号码》规定,身份证号共计18位,其中最后一位是检验位,前17位是表示省市县地区、年月日、顺序号和性别的数字。具体规则如下:

1.前1-6位:表示省市县地区。前两位表示省份,第3-4位表示地级市(直辖市市辖区),第5-6位表示县级行政区。

2.第7-14位:表示出生年月日。格式为YYYYMMDD。

3.第15-17位:表示顺序号。每个人的身份证号码不重复。即便是女性生了多个孩子,其身份证号后三位也不同。

4.第18位:表示校验码。校验码的计算方法为:将前17位数字按照规定的方式进行加权求和,然后将加权和除以11,取余数。余数对应的数字就是校验码。其中10用X来表示,即余数为10时,校验码为X。

二、身份证号校验算法

校验码计算方法如下:

1.将身份证号前17位的数字分别乘以对应的系数,结果相加(注意:系数分别为:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)

2.将上述相加结果除以11,得到一个余数

3.将余数根据以下对应规则转换为校验码(0、1、2、3、4、5、6、7、8、9、10转换为1、0、X、9、8、7、6、5、4、3、2)

具体代码实现如下(Swift语言):

func isValidIDNumber(_ idNumber: String) -> Bool {
    // 正则表达式判断格式是否正确
    let pattern = #"^\d{17}(\d|x|X)$"#
    let regex = try! NSRegularExpression(pattern: pattern, options: [])
    let range = NSMakeRange(0, idNumber.count)
    let results = regex.matches(in: idNumber, options: [], range: range)
    if results.count != 1 {
        return false
    }
    // 权重因子
    let factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    // 校验码对应值
    let checks = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
    // 获取前17位数字
    let startIndex = idNumber.startIndex
    let endIndex = idNumber.index(idNumber.endIndex, offsetBy: -1)
    let idNumber17 = idNumber[startIndex..<endIndex]
    // 计算加权和
    var sum = 0
    for (i, char) in idNumber17.enumerated() {
        let num = Int(String(char))!
        sum += num * factors[i]
    }
    // 计算校验码
    let remainder = sum % 11
    let checkChar = checks[remainder]
    // 校验
    let lastChar = idNumber.last!
    if lastChar == checkChar {
        return true
    } else {
        return false
    }
}

使用示例:

let idNumber = "440983199002122992"
if isValidIDNumber(idNumber) {
    print("校验通过")
} else {
    print("校验失败")
}

三、身份证校验相关问题

1.如何验证身份证号是否合法?

答:使用以上所给的校验代码即可验证。

2.如何验证身份证号码中的出生日期是否合法?

答:根据身份证号码中的出生年月日进行年月日校验即可。年份范围在1800年至现在,月份为1至12,日期为1至31。

四、示例代码

以一个简单的校验表单为例,用户输入身份证号后,点击“验证”按钮进行校验。

class ViewController: UIViewController {

    @IBOutlet weak var idNumberTextField: UITextField!
    @IBOutlet weak var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func validateButtonTapped(_ sender: Any) {
        let idNumber = idNumberTextField.text ?? ""
        if isValidIDNumber(idNumber) {
            resultLabel.text = "校验通过"
            resultLabel.textColor = UIColor.green
        } else {
            resultLabel.text = "校验失败"
            resultLabel.textColor = UIColor.red
        }
    }
}

另外一个示例代码是在使用身份证号码进行登录的同时,进行校验,校验通过后才能进行登录。

class LoginViewController: UIViewController {

    @IBOutlet weak var idNumberTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var loginButton: UIButton!
    @IBOutlet weak var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置登录按钮不可用
        loginButton.isEnabled = false
        // 添加两个文本框的事件回调
        idNumberTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
        passwordTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
    }

    @objc func textFieldDidChange() {
        // 判断身份证号码是否合法
        let idNumber = idNumberTextField.text ?? ""
        if isValidIDNumber(idNumber) {
            resultLabel.text = "校验通过"
            resultLabel.textColor = UIColor.green
            // 如果身份证号码合法,并且密码不为空,则可以点击登录按钮
            if let password = passwordTextField.text, !password.isEmpty {
                loginButton.isEnabled = true
            } else {
                loginButton.isEnabled = false
            }
        } else {
            resultLabel.text = "身份证号码不合法"
            resultLabel.textColor = UIColor.red
            loginButton.isEnabled = false
        }
    }

    @IBAction func loginButtonTapped(_ sender: Any) {
        // 进行登录操作
        // ...
    }
}

以上两个示例代码可以帮助我们更好地理解如何在IOS平台上进行身份证号的校验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IOS 身份证校验详细介绍及示例代码 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Visual Studio 2015和 .NET Core安装教程

    Visual Studio 2015和 .NET Core安装教程 安装Visual Studio 2015 首先,从Microsoft官网(https://www.visualstudio.com/downloads/)下载Visual Studio 2015安装包。 运行下载的安装包,选择 “Custom” 选项进行安装。在该选项卡中,选择要安装的组件(…

    人工智能概览 2023年5月25日
    00
  • java中关于深拷贝的几种方式总结

    Java中关于深拷贝的几种方式总结 什么是深拷贝 在Java中,当我们复制一个对象时,有两种不同的方式,即浅拷贝和深拷贝。浅拷贝仅复制对象的引用,而深拷贝是将整个对象及其内部所有的引用类型都复制一份,不会影响原对象。在某些情景下,我们可能需要使用深拷贝来保证数据的完整性和正确性。 Java中深拷贝的几种方式 1.使用ObjectInputStream/Obj…

    人工智能概览 2023年5月25日
    00
  • Django中redis的使用方法(包括安装、配置、启动)

    下面是Django中redis的使用方法的完整攻略。 安装redis 首先需要安装redis服务器。具体的安装过程依赖于你的操作系统。以下是在Ubuntu系统上安装的步骤: 打开终端程序,使用以下命令更新Ubuntu安装源: sudo apt-get update 使用以下命令安装redis: sudo apt-get install redis-serve…

    人工智能概论 2023年5月25日
    00
  • 为Python的web框架编写前端模版的教程

    为Python的Web框架编写前端模版的教程包括以下步骤: 选择前端模版引擎 在Python中,有多种选择可用于编写前端模板,例如Jinja2、Mako、Django模板等。选择哪一个引擎取决于您的个人偏好和项目需求。 安装模版引擎 在选择了合适的模版引擎后,需要先安装对应的包。例如,如果您选择了Jinja2,则可以使用pip命令进行安装: pip inst…

    人工智能概论 2023年5月25日
    00
  • python opencv人脸识别考勤系统的完整源码

    Python opencv人脸识别考勤系统的完整源码是一种基于Python编程语言和开源计算机视觉库opencv的人脸识别考勤系统。该项目的主要目的是通过使用计算机视觉技术自动检测和识别人脸来实现自动化考勤系统,从而提高考勤系统的效率和准确性,减少人工处理时间和错误率。 下面是使用Python opencv实现人脸识别考勤系统的完整攻略: 1.安装必要的依赖…

    人工智能概论 2023年5月25日
    00
  • 浅谈SpringBoot资源初始化加载的几种方式

    浅谈SpringBoot资源初始化加载的几种方式 在SpringBoot应用中,如果需要在应用启动时加载一些资源,例如配置文件、数据库表结构等等,我们可以采取以下几种方式。 方式一:使用SpringBoot的ApplicationRunner或CommandLineRunner接口 在SpringBoot应用中,如果希望在启动时完成一些初始化的工作,可以实现…

    人工智能概论 2023年5月25日
    00
  • 基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作

    实现条码和二维码的生成及打印处理操作,可以通过基于Bootstrap的Metronic框架来完成。下面来详细讲解实现过程: 步骤一:导入必要的工具库 使用Metronic框架实现条码和二维码的生成及打印处理操作,需要导入两个必要的工具库: JsBarcode:用于生成条码; qrcodejs:用于生成二维码; 其中,JsBarcode可以通过以下方式进行导入…

    人工智能概论 2023年5月25日
    00
  • 基于pytorch 预训练的词向量用法详解

    基于PyTorch预训练的词向量用法详解 简介 词向量是自然语言处理(NLP)领域中非常有用的一种技术,它可以将单词转换为向量,从而方便计算机进行处理。在PyTorch中,我们可以使用预训练的词向量,而不必从头开始训练。本文将介绍如何使用PyTorch预训练的词向量。 步骤 下载预训练的词向量 首先,我们需要从官方网站中下载要使用的预训练词向量。 加载预训练…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部