iOS开发实现随机图片验证码封装
发布时间 - 2026-01-11 02:37:01 点击率:次在 iOS 开发中,为了防止短信验证码的恶意获取,注册时需要图片验证,比如某共享单车 APP 在注册时就用了图片验证码,如下图:
图片验证码封装思路:
第一眼看到图片验证码,可能会觉得图片验证码是由 UIImage 实现的,但事实上明显不是,这里简单说下图片验证码封装思路。
- 首先要有一个数组,里面包含 1-9、a-z 这些字符
- 在 UIView 上显示这些字符
- 同时在 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帮你把自己的生活经历写成一个有趣的故事?
图册素材网站设计制作软件,图册的导出方式有几种?
如何在腾讯云服务器快速搭建个人网站?
下一篇:linux怎么进入命令行
下一篇:linux怎么进入命令行

