swift 文字驗證碼

這個demo的主要功能是用于防止有人浪用接口赠潦,頻繁的去請求接口带族。實現(xiàn)的主要原理如下:

1.創(chuàng)建一個用來驗證的字符串

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.為這個字符串創(chuàng)建一個視圖?


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//線條數(shù)量

{

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》最后的效果如下:


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昔园,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子并炮,更是在濱河造成了極大的恐慌默刚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逃魄,死亡現(xiàn)場離奇詭異荤西,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門邪锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勉躺,“玉大人,你說我怎么就攤上這事觅丰《Γ” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵妇萄,是天一觀的道長蜕企。 經(jīng)常有香客問我,道長冠句,這世上最難降的妖魔是什么轻掩? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮懦底,結果婚禮上唇牧,老公的妹妹穿的比我還像新娘。我一直安慰自己聚唐,他們只是感情好丐重,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杆查,像睡著了一般扮惦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上根灯,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天径缅,我揣著相機與錄音,去河邊找鬼烙肺。 笑死纳猪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的桃笙。 我是一名探鬼主播氏堤,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搏明!你這毒婦竟也來了鼠锈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤星著,失蹤者是張志新(化名)和其女友劉穎购笆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虚循,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡同欠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年样傍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铺遂。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡衫哥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出襟锐,到底是詐尸還是另有隱情撤逢,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布粮坞,位于F島的核電站蚊荣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捞蚂。R本人自食惡果不足惜妇押,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一跷究、第九天 我趴在偏房一處隱蔽的房頂上張望姓迅。 院中可真熱鬧,春花似錦俊马、人聲如沸丁存。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽解寝。三九已至,卻和暖如春艘儒,著一層夾襖步出監(jiān)牢的瞬間聋伦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工界睁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留觉增,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓翻斟,卻偏偏與公主長得像逾礁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子访惜,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容