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日

相关文章

  • django rest framework 数据的查找、过滤、排序的示例

    下面是关于 Django Rest Framework 的数据查找、过滤、排序示例的攻略: 1.准备工作 要使用Django Rest Framework进行数据查找、过滤和排序,需要做以下准备工作: 安装Django Rest Framework pip install djangorestframework 在项目的settings.py中安装DRF I…

    人工智能概览 2023年5月25日
    00
  • BitCola交易所怎么样?BitCola交易所正规吗

    BitCola交易所是一家比特币和数字货币交易平台。以下是关于BitCola交易所如何以及它是否合法和可信的详细攻略。 BitCola交易所是什么? BitCola交易所是一家2020年成立的数字货币交易平台。平台提供比特币、比特币现金、以太坊等20多种热门数字货币的现金和保证金(杠杆)交易。 BitCola交易所如何? 注册和安全 用户可以免费注册账户,并…

    人工智能概览 2023年5月25日
    00
  • 如何将maven项目划分为多个模块

    划分Maven项目为多个模块是一个很好的做法,可以提高项目的可维护性和代码的重用性。下面是一个完整的攻略,包括步骤和示例说明: 步骤 创建一个Maven项目 根据项目的功能、业务划分出若干个模块(module) 在项目的根目录下,使用命令行创建模块。例如: shell mvn archetype:generate \ -DgroupId=com.exampl…

    人工智能概览 2023年5月25日
    00
  • Django执行源生mysql语句实现过程解析

    好的。下面我会详细讲解“Django执行源生MySQL语句实现过程解析”的攻略。 1. 背景 在编写Django应用程序时,使用ORM来执行数据库操作是比较常见的做法。不过在某些特殊情况下,可能需要执行源生MySQL语句。 2. Django中执行MySQL语句的方法 在Django中执行MySQL语句有两种方法:使用django.db.connection…

    人工智能概论 2023年5月25日
    00
  • SQLite3的绑定函数族使用与其注意事项详解

    SQLite3的绑定函数族使用与其注意事项详解 什么是SQLite3的绑定函数族? 这里所谓的“绑定函数族”,是指在使用SQLite3进行编程的过程中,使用的与SQLite3直接交互的函数家族。这些函数用于与SQLite3数据库进行通讯及传值。另外,SQLite3绑定函数族还提供了一些额外的操作,如事务处理等。 SQLite3的绑定函数族由C函数库提供支持,…

    人工智能概论 2023年5月25日
    00
  • Spring中@Transactional注解的使用详解

    Spring中@Transactional注解的使用详解 什么是@Transactional注解 @Transactional注解是Spring框架为了支持事务管理而提供的注解之一。它可以被应用在类、方法或类方法上。如果应用在一个类上,那么该类的所有方法都将被视为有事务性。如果应用在一个方法上,那么该方法将被视为一个事务。@Transactional注解的意…

    人工智能概览 2023年5月25日
    00
  • Python+Django+MySQL实现基于Web版的增删改查的示例代码

    下面是“Python+Django+MySQL实现基于Web版的增删改查的示例代码”的完整攻略。 第一步:安装环境和工具 首先,我们需要安装Python、Django和MySQL。具体步骤如下: 安装Python。Python的官网https://www.python.org/提供了下载和安装说明。安装完毕后,需要添加Python的执行路径到系统环境变量中。…

    人工智能概论 2023年5月24日
    00
  • 详解SpringBoot开发案例之整合定时任务(Scheduled)

    下面就是详解SpringBoot开发案例之整合定时任务(Scheduled)的完整攻略。 一、前言 在我们的日常开发中,经常会有需要在指定的时间执行某些任务的需求。比如说定期产生统计报表、备份数据、扫描无效文件等等。在Java开发中,我们可以使用Java自带的Timer/TimerTask类或是Quartz等第三方框架实现定时执行任务。在Spring Boo…

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