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日

相关文章

  • 使用webservice自定义注解处理参数加解密问题

    使用webservice自定义注解处理参数加解密问题的完整攻略如下: 1. 创建自定义注解 首先,我们需要创建一个自定义注解,用于标记需要进行参数加解密的方法或参数。可以使用如下代码创建一个@EncryptDecrypt注解: import java.lang.annotation.ElementType; import java.lang.annotati…

    other 2023年10月14日
    00
  • Spring Boot文件上传最新解决方案

    Spring Boot文件上传最新解决方案 背景 随着互联网应用的发展,文件上传功能已经成为了许多Web应用必不可少的功能。而Spring Boot是目前比较流行的Web框架之一,它提供了一系列便捷的功能和工具来简化文件上传的开发。本文将向大家介绍Spring Boot文件上传的最新解决方案。 解决方案 在实现文件上传功能时,我们通常会选择一些第三方的库或工…

    other 2023年6月26日
    00
  • …设置_在matplotlib中用“contourf”设置colorbar范围

    在Matplotlib中用“contourf”设置colorbar范围 在Matplotlib中,contourf函数用于绘制等高线图,并且可以使用colorbar函数颜色条。在某些情况下我们需要手动设置颜色条的范围,以便更好地展示数据。以下是在Matplotlib中用contourf设置colorbar范的完整攻略,包括常见问题和两个示例说明。 常见问题 …

    other 2023年5月9日
    00
  • knockoutjs快速入门(经典)

    knockoutjs快速入门(经典) 什么是knockoutjs? knockoutjs是一款专门为web前端开发而设计的Javascript框架,为开发者提供了优秀的MVVM架构支持,它能够让您更加高效、快速地开发出高质量的Web应用程序。有了knockoutjs,您不仅能够方便地处理数据的双向绑定,还可以使用自定义函数、计算属性等高级功能快速构建出数据驱…

    其他 2023年3月29日
    00
  • firefox和谷歌不显示body背景图片的解决方法

    当使用Firefox或Chrome浏览器时,有时候会遇到body背景图片无法显示的问题。这可能是由于默认的浏览器样式和属性设置所导致的。以下是解决这个问题的一些方法: 方法一:检查文件路径和文件名 首先,请确保您的CSS文件路径和文件名拼写正确。在编写CSS代码时,您需要使用相对于您HTML文件的路径来引用背景图像。请确保路径是正确的,并且文件名也是正确的。…

    other 2023年6月27日
    00
  • 圣西罗足球场-景点介绍

    以下是关于圣西罗足球场景点介绍的完整攻略,包括基本概念、历史背景、景点介绍和两个示例说明。 圣西罗足球场景点介绍的基本概念 圣西罗足球场是位于意大利米兰的一座足球场,是AC米兰和国际米兰两支足球俱乐部的主场。圣西罗足球场是世界上最著名的足球场之一,也是欧洲最大的足球场之一。 圣西罗足球场景点介绍的历史背景 圣西罗足球场建于1926年,最初是为了举办1928年…

    other 2023年5月7日
    00
  • hmailserver邮件服务器搭建

    hMailServer邮件服务器搭建 在网络科技蓬勃发展的今天,电子邮件成为了人们日常必不可少的通信方式之一。而如果你是一家公司的网站管理员,可能需要自建邮件服务器来管理公司内部的邮件。本文将介绍如何使用hMailServer搭建一台邮件服务器,以便于管理公司的邮件。 环境要求 在开始搭建之前,请确保你的电脑符合以下的要求: 一台运行Windows操作系统的…

    其他 2023年3月28日
    00
  • win10 9926下载地址 win10消费预览版9926官网下载

    Win10 9926下载地址及安装攻略 Win10消费预览版9926是Windows 10的一个早期版本,本攻略将详细介绍如何下载和安装该版本。以下是完整的攻略过程: 步骤1:访问官方网站 首先,你需要访问Windows官方网站以获取Win10 9926的下载地址。你可以在以下网址找到官方下载页面:https://www.microsoft.com/zh-c…

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