场景分析:

1. app中使用手机号码获取验证码作为登录条件。(与各种电话平台合作,一般价格为 几分 - 1毛不等)

2. 电商app ,实名认证接口。 输入用户姓名与身份证号码进行实名认证 (一般公司都是与其他平台进行合作,基本上价格为 1次验证为1元左右)。

3. 电商app, 实时获取订单的物流信息, 输入物流号与物流公司,就可以获取到物流信息 (我们公司现在用的是快递100平台,分为了海外物流与国内物流 ,成本也是根据物流查询次数来计算价格。每天不超过2000次是免费的,但是超出的话,费用就相当贵了,不过对大公司来说,这个不算什么,也就包年20 - 30W,具体费用,可以与他们客服人员联系。)

4. 在线投票系统。 通过手机号码来进行投票。

解决办法:

针对以上问题。 以下是应对办法。

1. 手机号码登录 - 注册, 加上获取验证码间隔时间, 每一分钟只能获取一次。

2. 实名认证接口 - 需要由服务器端进行配合, 通过手机UUID - 或者是ip地址 - 用户id - 来进行每日次数限定

3.  手机号码投票系统  -  可以通过限定号码每日的最大发送数量

4. 还有一种,是比较常见的,就是通过输入验证码,进行防止机器人通过恶意操作进行频繁点击,也可以防止人为的故意点击。  这样就可以防止用户在查询订单的时候,循环点击查询订单物流信息,最大程度上的减少运营的成本。替公司减少开支。

下面是编码过程;

生成验证码的具体代码: swift版本验证码生成项目demo地址: https://github.com/zhonggaorong/GenerateCodeDemo

项目效果:

GenerateCodeView.swift

//
//  GenerateCodeView.swift
//  GenerateCodeDemo
//
//  Created by 张国荣 on 16/8/12.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//import UIKit//extension String {
//    subscript (r: Range<Int>) -> String {
//        get {
//            let subStart = advence(self.startIndex, r.startIndex, self.endIndex)
//            let subEnd = advance(subStart, r.endIndex - r.startIndex, self.endIndex)
//            return self.substringWithRange(Range(start: subStart, end: subEnd))
//        }
//    }
//    func substring(from: Int) -> String {
//        let end = countElements(self)
//        return self[from..<end]
//    }
//    func substring(from: Int, length: Int) -> String {
//        let end = from + length
//        return self[from..<end]
//    }
//}class GenerateCodeView: UIView {//随机产生颜色var randomColor = (Float)(arc4random()%255)/100.0// 验证码位数var codeNumber:Int = 4var codeString:String = ""//随机验证码数据源var dataArray:[String] = ["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"]override init(frame: CGRect) {super.init(frame: frame)self.layer.cornerRadius = 5.0self.layer.masksToBounds = trueself.changeBgColor()self.CreateGenerateCodeAction()}required init?(coder aDecoder: NSCoder) {super.init(coder: aDecoder)}//改变背景颜色func changeBgColor() -> Void {self.backgroundColor = self.generateColor()}// 随机验证码的view实现func CreateGenerateCodeAction() -> Void {codeString = ""for _ in 0...codeNumber-1 {var d = random()%dataArray.count-1if (d <= 0) {d = 0}else if (d >= dataArray.count) {d = dataArray.count - 1}print("---totalcount %d currentCount %d",dataArray.count, d)codeString = codeString.stringByAppendingString(dataArray[d])}self.setNeedsDisplay()}// 随机颜色func generateColor() -> UIColor {return UIColor.init(colorLiteralRed: (Float)(arc4random()%256)/256.0, green: (Float)(arc4random()%256)/256.0, blue: (Float)(arc4random()%256)/256.0, alpha: 1.0)}override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {self.changeBgColor()self.CreateGenerateCodeAction()}// 把随机码画上去override func drawRect(rect: CGRect) {if codeString.isEmpty {return;}self.backgroundColor = self.generateColor()let textString:String = codeStringlet charSize = textString.substringToIndex(textString.startIndex).sizeWithAttributes([NSFontAttributeName : UIFont.systemFontOfSize(16)])let width = rect.size.width/CGFloat(codeNumber) - charSize.width - 5;let hight = rect.size.height - charSize.height;var mypoint:CGPoint// 计算每个字符var point_x:CGFloatvar point_y:CGFloatlet intWidth = UInt32(Float(width))let intHight = UInt32(Float(hight))for i in 0...textString.characters.count-1 {let c:CGFloat = CGFloat(i)let myIn:Int = Int(i)point_x = (CGFloat)(arc4random()%intWidth) + rect.size.width/(CGFloat)(textString.characters.count) * cpoint_y = (CGFloat)(arc4random()%intHight)mypoint = CGPointMake(point_x, point_y)let charStr = textString[textString.startIndex.advancedBy(myIn)]let bb:String = ""let t = bb.stringByAppendingString(String(charStr))t.drawAtPoint(mypoint,withAttributes:([NSFontAttributeName : UIFont.systemFontOfSize(16)]))}let context = UIGraphicsGetCurrentContext()CGContextSetLineWidth(context, 1)var px:CGFloat = 0.0var py:CGFloat = 0.0for _ in 0...5 {CGContextSetStrokeColorWithColor(context, self.generateColor().CGColor)px = CGFloat(arc4random()%UInt32(Float(rect.size.width)))py = CGFloat(arc4random()%UInt32(Float(rect.size.height)))CGContextMoveToPoint(context, px, py)px = CGFloat(arc4random()%UInt32(Float(rect.size.width)))py = CGFloat(arc4random()%UInt32(Float(rect.size.height)))CGContextAddLineToPoint(context, px, py)CGContextStrokePath(context)}}/*// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.*/}
//
//  ViewController.swift
//  GenerateCodeDemo
//
//  Created by 张国荣 on 16/8/12.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//import UIKitclass ViewController: UIViewController {@IBOutlet weak var myCodeTextField: UITextField!@IBOutlet weak var generateCodeView: GenerateCodeView!override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.generateCodeView.CreateGenerateCodeAction()}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}@IBAction func testingAction(sender: AnyObject) {if generateCodeView.codeString == myCodeTextField.text {var alert = UIAlertView.init(title:"恭喜", message: "验证通过", delegate: nil, cancelButtonTitle: "确 认")alert.show()}else {var alert = UIAlertView.init(title:"失望", message: "验证失败", delegate: nil, cancelButtonTitle: "确 认")alert.show()}myCodeTextField.resignFirstResponder()}override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {self.view.endEditing(true)}
}

iOS防止用户恶意点击场景分析、防止用户恶意点击方法之本地动态验证码生成相关推荐

  1. iOS 本地动态验证码生成

    用于ios本地动态生成验证码,效果如下: 导入CoreGraphics.framework 用于绘制图形 封装UIView,便捷使用,代码如下: AuthcodeView.h #import < ...

  2. Python爬取44130条用户观影数据,分析挖掘用户与电影之间的隐藏信息!

    1.前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习 ...

  3. 点石互动--石头之用户搜索行为与关键词分析(一):用户的搜索行为对于关键词分析的意义及趋势

    点石互动 石头 发表于 06月 13, 2007 继上次发布关于站点和页面收录系列文章后,我决定将此前写过的关于用户搜索行为和关键词分析的一些文章也发布出来.以下是系列文章第一篇,主要简单地介绍为什么 ...

  4. 点石互动--石头之用户搜索行为与关键词分析(二):用户也会犯错

    点石互动   石头 发表于 06月 13, 2007 所有的seo最重要的就是关键词分析+站点对搜索友好.在上篇文章中,石头介绍了为什么要进行用户搜索行为分析,以及搜索用户行为的一些变化趋势.今天,我 ...

  5. php爬虫:知乎用户数据爬取和分析

    php爬虫:知乎用户数据爬取和分析 2016-04-10    PHP开发者     (点击上方公众号,可快速关注) 作者:崔小拽        原文链接:http://cuihuan.net/art ...

  6. 万字用户画像标签体系建设分析指南!

    转自:大数据梦想家 01 什么是用户画像 用户画像是指根据用户的属性.用户偏好.生活习惯.用户行为等信息而抽象出来的标签化用户模型.通俗说就是给用户打标签,而标签是通过对用户信息分析而来的高度精炼的特 ...

  7. 从用户场景分析云计算

    从用户场景分析云计算 à写在前面: 自炒出"云计算"这么个概念之后,每个人对云计算可能都或多或少地有些不一样的看法或观点,我也不例外,至少现在我仍然坚定不移地相信我的理解至少八成是 ...

  8. 产品经理必读:用户场景分析的四要素

    导读:用户场景是指用户在不同时间.地点.环境下引发的不同心境.行为或需求,其实就是指用户在某个环境中会触发并完成某个任务. 作者:朱军华 来源:大数据DT(ID:hzdashuju) 假如让你列举一下 ...

  9. 基于用户角色的数据库智能监控系统应用场景分析

    摘要:本文尝试从概念和逻辑上推导了基于用户角色的数据库智能监控系统的可能应用场景. 本文分享自华为云社区<GaussDB(DWS)数据库智能监控系统应用场景分析>,原文作者:鲁大师. 与互 ...

最新文章

  1. [Node.js] 2、利用node-git-server快速搭建git服务器
  2. BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法
  3. python 网关配置界面代码_Linux下使用python自动修改本机网关代码分享
  4. 卷积神经网络 全连接层(稠密层)是什么?(全连接层就是每一个结点都与上一层的所有结点相连的网络层)
  5. c语言求100以内整除13的最大,VB程序设计的一道题,找出100以内能被3整除的所有数之和,并把值保存在一维数组中...
  6. Nodejs之view中的视图模板之——EJS模板语言,快速入门
  7. 7002.ubuntu18.04将软件图标固定到工具栏
  8. ApacheCN 所有教程/文档集已备份到 Coding
  9. PixelFormat 枚举
  10. STM32寄存器操作端口模式SDA_OUT()/SDA_IN()
  11. 软件构架 课堂练习一
  12. 2018 大数据学习入门必备规划
  13. Java -- JSP面试题及答案
  14. 计算机一级考试题库基础知识,计算机一级考试题库(含答案)
  15. JS设计模式——责任链模式
  16. Elasticsearch优化的一些建议
  17. 2020 MoDnet 视频抠图论文笔记
  18. Invalid parameter passed to C runtime function.
  19. Python习题——2018-03-28作业
  20. 国人“急功近利”的理由和无奈

热门文章

  1. java编写文字三国杀初学_文字版三国杀开发
  2. 列主元高斯消去法解线性方程组——C语言实现
  3. 毕业设计--在线挂号系统APP(VUE)
  4. android端的的网络访问
  5. 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入
  6. PHP之SQL防注入代码,PHP防XSS 防SQL注入的代码
  7. 医院弱电工程辨别光缆八步骤
  8. 丑小鸭课件软件测试,《丑小鸭的故事》课件.ppt
  9. 【知识梳理】前端路由的两种模式
  10. 冒泡排序(优化)SCL算法