iOS自定义身份证键盘

iOS自定义身份证键盘是一种应用场景非常广泛的自定义键盘,在中国的银行、保险、政府等机构中都有应用。在这里,我将为大家介绍如何实现一个完整的iOS自定义身份证键盘。

第一步:创建一个新的自定义键盘

首先,我们需要在Xcode中创建一个新的CustomKeyboard项目。选择 File -> New -> Target -> Application Extension -> Custom Keyboard,然后在弹出的对话框中为应用程序输入名称。在创建好新项目的同时,它也会为您生成适当的代码。

第二步:创建身份证键盘的UI

接下来,我们需要为我们的自定义键盘添加身份证的UI,这里我们使用简单的UI框架布局来设置身份证键盘。

override func viewDidLoad() {
   super.viewDidLoad()

   let keyboardView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 220))
   keyboardView.backgroundColor = UIColor.white

   let backBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 75, height: 55))
   backBtn.setTitle("删除", for: .normal)
   backBtn.addTarget(self, action: #selector(deleteBtnPressed), for: .touchUpInside)
   backBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
   backBtn.setTitleColor(.black, for: .normal)
   keyboardView.addSubview(backBtn)

   let titleLabel = UILabel(frame: CGRect(x: 85, y: 0, width: 150, height: 55))
   titleLabel.text = "身份证号码"
   titleLabel.font = UIFont.systemFont(ofSize: 16.0)
   titleLabel.textColor = .darkGray
   titleLabel.textAlignment = .center
   keyboardView.addSubview(titleLabel)

   let doneBtn = UIButton(frame: CGRect(x: 235, y: 0, width: 85, height: 55))
   doneBtn.setTitle("完成", for: .normal)
   doneBtn.addTarget(self, action: #selector(doneBtnPressed), for: .touchUpInside)
   doneBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
   doneBtn.setTitleColor(.black, for: .normal)
   keyboardView.addSubview(doneBtn)

   let horizontalStackView = UIStackView(frame: CGRect(x: 0, y: 55, width: keyboardView.frame.width, height: 70))
   horizontalStackView.axis = .horizontal
   horizontalStackView.distribution = .fillEqually
   keyboardView.addSubview(horizontalStackView)

   for i in 0...9 {
       let btn = UIButton(type: .system)
       btn.setTitle("\(i)", for: .normal)
       btn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
       btn.setTitleColor(.black, for: .normal)
       btn.addTarget(self, action: #selector(numberBtnPressed), for: .touchUpInside)
       horizontalStackView.addArrangedSubview(btn)
   }

   let horizontalStackView2 = UIStackView(frame: CGRect(x: 0, y: 125, width: keyboardView.frame.width, height: 70))
   horizontalStackView2.axis = .horizontal
   horizontalStackView2.distribution = .fillEqually
   keyboardView.addSubview(horizontalStackView2)

   let clearBtn = UIButton(type: .system)
   clearBtn.setTitle("清空", for: .normal)
   clearBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
   clearBtn.setTitleColor(.black, for: .normal)
   clearBtn.addTarget(self, action: #selector(clearBtnPressed), for: .touchUpInside)
   horizontalStackView2.addArrangedSubview(clearBtn)

   let leftBracketBtn = UIButton(type: .system)
   leftBracketBtn.setTitle("(", for: .normal)
   leftBracketBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
   leftBracketBtn.setTitleColor(.black, for: .normal)
   leftBracketBtn.addTarget(self, action: #selector(leftBracketBtnPressed), for: .touchUpInside)
   horizontalStackView2.addArrangedSubview(leftBracketBtn)

   let rightBracketBtn = UIButton(type: .system)
   rightBracketBtn.setTitle(")", for: .normal)
   rightBracketBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
   rightBracketBtn.setTitleColor(.black, for: .normal)
   rightBracketBtn.addTarget(self, action: #selector(rightBracketBtnPressed), for: .touchUpInside)
   horizontalStackView2.addArrangedSubview(rightBracketBtn)

   self.view.addSubview(keyboardView)
}

在这里,我们创建了一个类似于标准数字键盘的UI,但添加了清空和圆括号按钮等额外的按钮,以便用户更方便地输入身份证。

第三步:添加身份证号码的验证逻辑

接下来,我们需要为我们的自定义键盘添加身份证验证逻辑。我们可以使用正则表达式来验证身份证输入是否正确。以下是一个用于检查中国大陆身份证的正则表达式:

let identityRegEx = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}(0[1-9]|[1-9][012])\\d{2}\\d{3}[0-9xX]$"

当用户在身份证键盘上按下数字时,我们将存储在键盘输入区域中的文本与该正则表达式进行比较,以查看输入是否为身份证号码。如果输入无效,则会显示一个警告,直到用户修复为止。

以下是在身份证键盘ViewController中添加身份证验证逻辑的代码片段:

// 定义一个储存键盘输入的字符串变量
var inputText = ""

@objc func numberBtnPressed(_ sender: UIButton) {
   guard let enteredText = sender.currentTitle else {
       return
   }

   // 如果输入达到18位自动返回
   guard inputText.count < 18 else {
       return
   }

   // 将文本附加到键盘输入字符串变量上
   inputText += enteredText

   // 计算剩余输入文本的长度
   let remainingLength = 18 - inputText.count

   if remainingLength == 0 {
       // 验证身份证是否有效
       if isValidIdentityNumber(identityNumber: inputText) {
           // 关闭键盘并将输入传回主应用程序
           self.dismissKeyboard()
           self.textDocumentProxy.insertText(inputText)
       } else {
           // 显示不正确警告
           let alertController = UIAlertController(title: "身份证格式不正确", message: "请检查您输入的身份证号码并重试", preferredStyle: .alert)
           let okAction = UIAlertAction(title: "确定", style: .default, handler: nil)
           alertController.addAction(okAction)
           self.present(alertController, animated: true, completion: nil)

           // 清空输入文本
           inputText = ""
       }
   }
}

func isValidIdentityNumber(identityNumber: String) -> Bool {
   let identityRegEx = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}(0[1-9]|[1-9][012])\\d{2}\\d{3}[0-9xX]$"
   let identityTest = NSPredicate(format: "SELF MATCHES %@", identityRegEx)
   return identityTest.evaluate(with: identityNumber)
}

示例一:身份证号码输入

以下是使用自定义身份证键盘输入身份证号码的示例:

  1. 在iOS中的任何文本输入字段上,点击键盘中的全球图标以切换到自定义身份证键盘。

  2. 点击身份证键盘上的数字按钮以输入身份证号码。

  3. 键入完整的18位身份证号码后,键盘将关闭并输入身份证号码。

示例二:中途取消身份证号码输入

以下是使用自定义身份证键盘取消身份证号码输入的示例:

  1. 在iOS中的任何文本输入字段上,点击键盘中的全球图标以切换到自定义身份证键盘。

  2. 点击身份证键盘上的数字按钮以输入身份证号码。

  3. 在键入全部数字之前或在键入字母、符号或其他内容时,点击清空按钮以清除输入。

  4. 点击删除按钮以删除最后输入的数字。

  5. 由于输入不是18位身份证号码,键盘将显示一个错误警告。

  6. 修复错误后重试输入身份证号码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS自定义身份证键盘 - Python技术站

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

相关文章

  • 基于java类路径classpath和包的实例讲解

    在讲解”基于java类路径classpath和包的实例讲解”的攻略之前,我们先了解一下什么是java类路径以及包。 Java类路径(Classpath) Java类路径,即Classpath,指的是Java虚拟机(JVM)查找类和资源文件的路径,默认情况下,JVM通过系统环境变量”CLASSPATH”来确定Java类路径。 一个Java程序通常会依赖于多个类…

    other 2023年6月27日
    00
  • Swift继承Inheritance浅析介绍

    Swift继承Inheritance浅析介绍 什么是继承? 在Swift中,继承是一种实现代码重用的方法。子类可以继承父类的属性和方法,并且可以在此基础上添加自己的属性和方法。 如何定义一个继承关系? 在Swift中,通过在子类的类名后面加上父类的类名,来定义一个继承关系。下面是一个例子: class Person { var name: String va…

    other 2023年6月26日
    00
  • 深入了解Python 变量作用域

    深入了解Python 变量作用域 在Python中,变量作用域指的是变量在程序中可见和可访问的范围。了解变量作用域对于编写可维护和可理解的代码非常重要。本攻略将详细介绍Python中的变量作用域,并提供两个示例来说明不同作用域的概念。 全局作用域 全局作用域是在整个程序中都可见的作用域。在全局作用域中定义的变量可以在程序的任何地方访问。 示例1: x = 1…

    other 2023年7月29日
    00
  • windowsserver2008r2服务器系统安装及配置全过程图文…

    Windowsserver2008r2服务器系统安装及配置全过程图文教程 一、安装Windows Server 2008 R2操作系统 1. 准备工作: 下载相应的Windows Server 2008 R2系统镜像文件,并制作启动盘。 准备一台符合安装要求的计算机,确保计算机启动时读取安装盘。 2. 进入系统安装界面: 将Windows Server 20…

    其他 2023年3月28日
    00
  • 翻译qmake文档(三) Creating Project Files

    翻译qmake文档(三) Creating Project Files 在上一篇翻译qmake文档的文章中,我们介绍了qmake文件的基础知识和语法,以及如何指定源文件和头文件等。在本篇文章中,我们将进一步介绍如何创建项目文件。 创建项目文件 在使用qmake创建项目文件之前,需要先了解几个概念: 1. 项目文件 项目文件是一个.qmake文件,用于定义整个…

    其他 2023年3月28日
    00
  • 基于fpga的图像开发平台其他摄像头附件说明(ov5642ov9655)

    基于FPGA的图像开发平台是一种用于图像处理和计算机视觉应用的硬件平台。在该平台上,我们可以使用不同的摄像头附件来捕获图像。本文将介绍如何使用ov5642和ov9655摄像头附件。下面是基于FPGA的图像开发平台其他摄像头附件说明的完整攻略,包括两个示例说明。 示例一:使用ov5642摄像头附件 ov5642是一种常用的摄像头附件,可以用于基于FPGA的图像…

    other 2023年5月9日
    00
  • python面向对象之类的继承详解

    Python面向对象之类的继承详解 在Python面向对象编程中,继承是一种重要的概念。类之间的继承关系可以有效地避免代码冗余,并提高代码的可复用性。本文将详细讲解Python中的类继承,以及如何使用继承创建基类和派生类。 1. 类继承的基本概念 在Python中,一个类可以继承另外一个类的所有属性和方法。被继承的类称为父类、基类、超类(superclass…

    other 2023年6月26日
    00
  • java ArrayList的深拷贝与浅拷贝问题

    什么是深拷贝和浅拷贝? 在Java中,我们经常使用集合类来存储和操作对象。其中ArrayList是一种常用的动态数组(可变长度的数组)实现。但是在使用过程中,会遇到对象拷贝的问题:是深拷贝还是浅拷贝? 深拷贝和浅拷贝是针对对象进行复制、克隆的概念,假设有一个对象A,它有一个成员变量B,而B又有一个成员变量C,那么进行拷贝时,如果只是将A拷贝一份,那么B与其指…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部