美文网首页iOS Developer
swift 文字验证码

swift 文字验证码

作者: icc_tips | 来源:发表于2017-05-31 15:33 被阅读49次

这个demo的主要功能是用于防止有人浪用接口,频繁的去请求接口。实现的主要原理如下:

1.创建一个用来验证的字符串

func getAuthcode() {

codeArray = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

for _ in 0..<6//需要多少个字符来验证

{

let num = codeArray.count-1

let y = Int(arc4random_uniform(UInt32(num)))

let tempStr = codeArray[y]

if codeString == nil {

codeString =  tempStr

}else{

codeString = codeString! +  tempStr

}}}

2.为这个字符串创建一个视图 

override func draw(_ rect: CGRect) {

super.draw(rect)

self.backgroundColor = UIColor.init(red: CGFloat(Double(arc4random()%256)/256.0) , green:  CGFloat(Double(arc4random()%256)/256.0) , blue:  CGFloat(Double(arc4random()%256)/256.0) , alpha: 1.0)

let cSize = ("A" as NSString).size(attributes: [NSFontAttributeName:UIFont.systemFont(ofSize: 20)])

let width = rect.size.width/CGFloat((codeString! as NSString).length) - cSize.width

let height = rect.size.height - cSize.height

var point:CGPoint?

var x:CGFloat = 0.0

var y:CGFloat = 0.0

for index in 0..<(codeString! as NSString).length {

x = CGFloat(arc4random_uniform(UInt32(width))) + rect.size.width/CGFloat((codeString! as NSString).length)*CGFloat(index)

y = CGFloat(arc4random_uniform(UInt32(height)))

point = CGPoint.init(x: x, y: y)

let  c = (codeString! as NSString).character(at: index)

let textC:String = String(Character(UnicodeScalar(c)!))

(textC as NSString).draw(at: point!, withAttributes: [NSFontAttributeName:UIFont.systemFont(ofSize: CGFloat(arc4random_uniform(UInt32(5)) + 15))])

}

let context = UIGraphicsGetCurrentContext()

context?.setLineWidth(1.0)

for _ in 0..<5//线条数量

{

let color =  UIColor.init(red: CGFloat(Double(arc4random()%256)/256.0) , green:  CGFloat(Double(arc4random()%256)/256.0) , blue:  CGFloat(Double(arc4random()%256)/256.0) , alpha: 1.0)

context?.setStrokeColor(color.cgColor)

x = CGFloat(arc4random_uniform(UInt32(rect.size.width)))

y = CGFloat(arc4random_uniform(UInt32(rect.size.height)))

context?.move(to: CGPoint.init(x: x, y: y))

x = CGFloat(arc4random_uniform(UInt32(rect.size.width)))

y = CGFloat(arc4random_uniform(UInt32(rect.size.height)))

context?.addLine(to: CGPoint.init(x: x, y: y))

context?.strokePath()

}}

3.为这个视图添加触摸手势,可以让其更换视图

override func touchesBegan(_ touches: Set, with event: UIEvent?) {

codeString = nil

self.getAuthcode()

self.setNeedsDisplay()

}

4》最后的效果如下:

相关文章

  • swift 文字验证码

    这个demo的主要功能是用于防止有人浪用接口,频繁的去请求接口。实现的主要原理如下: 1.创建一个用来验证的字符串...

  • 手写验证码和各种水印

    场景一:普通验证码 场景二:中文验证码(需要引入中文字体到虚拟目录下) 场景三:打开图片添加验证码 场景四:文字水...

  • python爬虫之模拟移动

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • python爬虫之滑动验证码[完整版]

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • python爬虫之图像对比

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • python爬虫之轨迹算法

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • Python+OCR图片文字识别,验证码识别,银行卡识别

    Python+OCR图片文字识别,验证码识别,银行卡识别 利用测试如下: 1.识别文字 2.识别简单的验证码 3....

  • Python爬虫 | 普通验证码破解 tesserocr

    验证码是众多网站采取的反爬措施。验证码的花样也很多,主要有下面这几种类验证码:图形验证码:数字、英文字母、混淆曲线...

  • java实现动态验证码

    java动态实现验证码,供大家参考,具体内容如下 【实现效果】 点击图片或者文字可以更换验证码验证码随机生成,由大...

  • 前后端分离情况下的图形验证码

    图形验证码包含两部分:图片和文字验证码。在JSP时代,图形验证码生成和验证是通过Session机制来实现的:后端生...

网友评论

    本文标题:swift 文字验证码

    本文链接:https://www.haomeiwen.com/subject/jqkjfxtx.html