iOS开发实现随机图片验证码封装

发布时间 - 2026-01-11 02:37:01    点击率:

在 iOS 开发中,为了防止短信验证码的恶意获取,注册时需要图片验证,比如某共享单车 APP 在注册时就用了图片验证码,如下图:

图片验证码封装思路:

第一眼看到图片验证码,可能会觉得图片验证码是由 UIImage 实现的,但事实上明显不是,这里简单说下图片验证码封装思路。

  1. 首先要有一个数组,里面包含 1-9、a-z 这些字符
  2. 在 UIView 上显示这些字符
  3. 同时在 UIView 上绘制干扰线

效果图

图片验证码效果图

用法

  _testView = [[NNValidationView alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 100) / 2, 200, 100, 40) andCharCount:4 andLineCount:4];
  [self.view addSubview:_testView];

以上两行代码便可以实现图片验证码,其中 charCount 和 lineCount 分别指显示的字符串数量以及干扰线的数量。

另外我们还需要知道图片验证码上的字符串,可以用下边这个 block 获取:

 __weak typeof(self) weakSelf = self;
  /// 返回验证码数字
  _testView.changeValidationCodeBlock = ^(void){
    NSLog(@"验证码被点击了:%@", weakSelf.testView.charString);
  };

打印效果如下

获取验证码数字

核心代码

#pragma mark - 绘制界面
- (void)drawRect:(CGRect)rect {
  [super drawRect:rect];
  self.backgroundColor = NNRandomColor;
  CGFloat rectWidth = rect.size.width;
  CGFloat rectHeight = rect.size.height;
  CGFloat pointX, pointY;
  
  NSString *text = [NSString stringWithFormat:@"%@",self.charString];
  NSInteger charWidth = rectWidth / text.length - 15;
  NSInteger charHeight = rectHeight - 25;
  
  // 依次绘制文字
  for (NSInteger i = 0; i < text.length; i++) {
    // 文字X坐标
    pointX = arc4random() % charWidth + rectWidth / text.length * i;
    // 文字Y坐标
    pointY = arc4random() % charHeight;
    unichar charC = [text characterAtIndex:i];
    NSString *textC = [NSString stringWithFormat:@"%C", charC];

    [textC drawAtPoint:CGPointMake(pointX, pointY) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:arc4random() % 10 + 15]}];
  }
  
  // 获取上下文
  CGContextRef context = UIGraphicsGetCurrentContext();
  // 设置线宽
  CGContextSetLineWidth(context, 1.0);
  
  // 依次绘制直线
  for(NSInteger i = 0; i < self.lineCount; i++) {
    // 设置线的颜色
    CGContextSetStrokeColorWithColor(context, NNRandomColor.CGColor);
    // 设置线的起点
    pointX = arc4random() % (NSInteger)rectWidth;
    pointY = arc4random() % (NSInteger)rectHeight;
    CGContextMoveToPoint(context, pointX, pointY);
    // 设置线的终点
    pointX = arc4random() % (NSInteger)rectWidth;
    pointY = arc4random() % (NSInteger)rectHeight;
    CGContextAddLineToPoint(context, pointX, pointY);
    // 绘画路径
    CGContextStrokePath(context);
  }
}

代码中写了注释,因此这里不再详细解释,需要看全部代码的童鞋可以点击下边的链接,有疑问或有建议的话欢迎讨论。

demo 地址:NNValidationView

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# iOS随机图片验证码  # iOS  # 图片验证码  # iOS 生成图片验证码绘制实例代码  # iOS 生成图片验证码(实用功能)  # 利用iOS绘制图片生成随机验证码示例代码  # IOS实现验证码倒计时功能(一)  # iOS获取短信验证码倒计时的两种实现方法  # iOS本地动态生成验证码的方法  # IOS实现验证码倒计时功能(二)  # iOS生成图片数字字母验证效果  # 验证码  # 是由  # 要有  # 可以用  # 用了  # 便可  # 要知道  # 写了  # 时就  # 还需  # 第一眼  # 为了防止  # 大家多多  # 两行  # 如下图  # 时需  # 童鞋  # 但事实上  # 有疑问  # view 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何有效防御Web建站篡改攻击?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何在云指建站中生成FTP站点?  新三国志曹操传主线渭水交兵攻略  如何快速搭建虚拟主机网站?新手必看指南  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  如何在搬瓦工VPS快速搭建网站?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何为API生成Swagger或OpenAPI文档  ,南京靠谱的征婚网站?  js代码实现下拉菜单【推荐】  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  如何在阿里云购买域名并搭建网站?  如何选择PHP开源工具快速搭建网站?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel如何使用Collections进行数据处理?(实用方法示例)  高防服务器:AI智能防御DDoS攻击与数据安全保障  浅谈redis在项目中的应用  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在建站宝盒中设置产品搜索功能?  如何在服务器上配置二级域名建站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何在七牛云存储上搭建网站并设置自定义域名?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何在Windows 2008云服务器安全搭建网站?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何在香港免费服务器上快速搭建网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何挑选优质建站一级代理提升网站排名?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  郑州企业网站制作公司,郑州招聘网站有哪些?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  图册素材网站设计制作软件,图册的导出方式有几种?  如何在腾讯云服务器快速搭建个人网站?