simpleCaptcha 语音实现及其扩展

在我了解的的Captcha中 有两个框架一个JCaptcha和simpleCaptcha都可以去实现语音验证码,JCaptcha比较的麻烦,所以我对语音验证码实现用比较简单的simpleCaptcha
多的不说了直接来

准备工作

  1. 首先下载架包,这个架包在maven仓库是找不到的,只能从官网下载,官网地址链接: http://simplecaptcha.sourceforge.net .
  2. 然后将复制jar导入到项目中WEB-INF/lib (这个路径就根据你的项目路径lib配置,maven项目呢就maven集成就行)

实现

simpleCaptcha 提供了简单实现servlet 实现 ,直接在web.xml配置就行

   <servlet><servlet-name>AudioCaptcha</servlet-name><servlet-class>nl.captcha.servlet.AudioCaptchaServlet</servlet-class></servlet><servlet-mapping><servlet-name>AudioCaptcha</servlet-name><url-pattern>/audio.wav</url-pattern></servlet-mapping>
> simpleCaptcha 提供四个实现 (nl.captcha.servlet)>1.StickyCaptchaServlet 随机生成5个字符(数字+字母) 结果会放在session中存储,刷新页面不会改变值,继承simpleCaptchaServlet。 >2.ChineseCaptchaServlet 随机生成5个中文字符,结果也会放入session中存储,刷新页面不会改变值,继承simpleCaptchaServlet。 >3.AudioCaptcha   默认生成5个字符 语音验证码 >4.SimpleCaptchaServlet 随机数生成5个字符(数字+字母)放在page中,页面刷新会重新生成。

可以搜索

CaptchaServlet

进行源码搜索查看

然后到这里基本的结束啦 … 简单吧

实现扩展

我们稍稍改动哦 将servlet 实现 通过spring web工程实现

     @RequestMapping("/doAudioCaptcha.wav")@ResponseBodypublic void doAudioCaptcha() {AudioCaptcha ac = (new AudioCaptcha.Builder()).addAnswer().addVoice().addNoise().build();String answer = ac.getAnswer();session.setAttribute("audioCaptcha", ac);//IO流Sample sample = ac.getChallenge();response.setHeader("Cache-Control", "private,no-cache,no-store");response.setContentType("audio/wave");try {ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);AudioSystem.write(sample.getAudioInputStream(), AudioFileFormat.Type.WAVE, baos);response.setContentLength(baos.size());OutputStream os = response.getOutputStream();os.write(baos.toByteArray());os.flush();os.close();} catch (IOException e) {e.printStackTrace();}}

然后得到结果跟servlet 的一样

 AudioCaptcha ac = (new AudioCaptcha.Builder()).addAnswer().addVoice().addNoise().build();

这个方法直接就实现啦验证码 AudioCaptcha (语音)和 Captcha(文字)
//AudioCaptcha

  • build() 构建
  • addAnswer() 文字
  • addVoice() 音频
  • addNoise() 噪音

//Captcha

  • addBackground() 背景
  • build() 构建
  • addText() 文本
  • gimp() 花边
  • addBorder()线条
    这里只是扩展源码一些方法,讲了些废话

接着走,语音提供了AudioCaptcha addAnswer() 然后查看源码

addAnswer是可以传递一个接口 TextProducer 提供默认实现

这里我们就可以重写 DefaultTextProducer 这个类 ,改变DEFAULT_LENGTH 和 DEFAULT_CHARS 进行自定义

 @RequestMapping("/doAudioCaptcha.wav")@ResponseBodypublic void doAudioCaptcha() {//实现自定义字符传入SampleDefaultTextProducer defaultTextProducer=new SampleDefaultTextProducer("12345");//实现自定义音频来源SamplRandomVoiceProducer samplRandomVoiceProducer=new SamplRandomVoiceProducer();//实现自定义噪音RandomNoiseProducer randomNoiseProducer=new RandomNoiseProducer();AudioCaptcha ac = (new AudioCaptcha.Builder()).addAnswer(defaultTextProducer).addVoice(samplRandomVoiceProducer).addNoise().build();String answer = ac.getAnswer();System.out.println("------------------------------answer---------------------------:"+answer);session.setAttribute("audioCaptcha", ac);//IO流Sample sample = ac.getChallenge();response.setHeader("Cache-Control", "private,no-cache,no-store");response.setContentType("audio/wave");try {ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);AudioSystem.write(sample.getAudioInputStream(), AudioFileFormat.Type.WAVE, baos);response.setContentLength(baos.size());OutputStream os = response.getOutputStream();os.write(baos.toByteArray());os.flush();os.close();} catch (IOException e) {e.printStackTrace();}}

这里已经实现自定义字符传入读出音频

哎呦有坑 answer 传入的abcde字符报错啦

期望是一个数字,得到的是“a”。

其实这个是有原因的
AudioCaptcha addVoice() 音频

我们接着看源码
如果不传参数 new RandomNumberVoiceProducer() 实例
再看RandomNumberVoiceProducer

这里把char 转成 Integer 哎呦 emmmmm
原来是

simpleCaptcha 在提供音频的是配置默认路径 我找到路径下的音频,发现simpleCaptcha 只有提供啦0-9的音频

所以想要支持26个字母需要提供相应的音频,最后扩展VoiceProducer 的默认实现

谢谢观看!!

simpleCaptcha语音验证码实现及其扩展相关推荐

  1. 调用语音验证码的接口与图形验证码框架

    调用语音验证码的接口 语音验证码就是以打电话的方式,通过电话语音播报的方式把验证码告诉给用户,语音验证码使用的不多. 因为第三方的接口价格相对于短信验证码来说比较贵,并且效果一般,只能发送纯数字的语音 ...

  2. 短信语音验证码发展的必然趋势

    在互联网的大潮中,很多移动即时通讯软件也随之崛起,在这期间短信在互联网的发展中一直占据了不可取代的位置. 在之前,短信是用来联系对方的,然后随着一些手机软件的不断更新换代中,现在大部分的人都用微信或者 ...

  3. python语音验证码识别_Python验证码识别

    大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验 ...

  4. 语音验证码接收平台接口调用文档

    语音验证码接收平台接口,通过手机接听验证码实现验证功能. 接口名称:语音验证码接收平台接口 接口平台:api接口 接口地址:http://op.juhe.cn/yuntongxun/voice 支持格 ...

  5. php 发 语音验证码,PHP集成发送手机短信验证码、语音验证码接口函数及使用方法...

    有时大家在做php 项目时,需要用到用程序控制手机发送短信内容,用作验证码,语音验证码或者一些通知信息.偶然间在网上看到云片网的手机发送接口不错,功能也很多,下面介绍下该接口的php使用方法,以备后用 ...

  6. java语音验证码_Java实现发送手机短信语音验证功能代码实例

    这篇文章主要介绍了Java实现发送手机短信语音验证功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 利用第三方平台可以实现发送手机短信验证 ...

  7. java语音验证码_Java代码示例_Java语音验证接口 | 微米-中国领先的短信彩信接口平台服务商...

    Java语音验证接口代码示例 请求 import java.util.HashMap; import java.util.Map; public class IvrDemo { /** * 语音验证接 ...

  8. 语音验证码是怎么发的?如何选择语音验证码平台?

    语音验证码是一种常见的语音形式的验证码.确保用户手机能正常通话,即可收到自动播报的语音验证码,更安全可靠,同时还可提升用户体验感,提高企业和平台的客户满意度. 语音验证码是怎么发的? 用户使用网站或平 ...

  9. 语音验证码短信原理和应用场景分析

    引言 随着移动互联网的快速发展,短信验证码成为了许多应用和服务中常用的身份验证方式.然而,有时候用户可能由于各种原因无法接收到短信验证码,或者对于文字验证码不够方便或友好. 为了解决这些问题,语音验证 ...

  10. python语音验证码识别_python验证码自动识别

    在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验证码,识别 ...

最新文章

  1. 《系统集成项目管理工程师》必背100个知识点-58沟通方式
  2. 高精度计时器(编程测试效率用)
  3. 如何使用 mock 数据在本地运行 SAP Fiori Elements
  4. Erlang TCP Socket的接收进程的2种方案
  5. spring事务浅析
  6. 数据库树形结构、多级联动的表设计
  7. C语言例题:数字重组
  8. SQL Server 2005各版本区别
  9. 使用pyautogui自动刷微信表情
  10. 如何在Mac上使用QuickTime Player 录制影片?
  11. 电脑开机显示“被调用的对象已与其客户端断开连接”解决方法
  12. 制坯系列-Golang专题-chan
  13. OS知识点汇总(考研用)——第二章:进程管理(下)
  14. 一文讲解单片机、ARM、MUC、DSP、FPGA、嵌入式错综复杂的关系
  15. 达人评测 i5 13500h和i5 12450h选哪个
  16. HDU 4069 Squiggly Sudoku【Dancing Links精确覆盖】
  17. 培训4个月编程学什么比较好_编程,开放式硬件以及4月的更多新文章
  18. 2022 年欧美上市公司价值/数量暴跌 90%
  19. 未找到要求的 from 关键字_临沂网站关键字优化工具
  20. 计算机应用领域的实践,计算机技术在通信技术领域的应用实践探微

热门文章

  1. 2022年HGAME中REVERSE的Flag Checker
  2. 上海交通大学学生生存手册
  3. html5海洋模板,海洋cms模板 海洋cms影视模板 海洋cms模板简洁
  4. python arcgis 批量裁剪栅格文件
  5. 怎样用投资的逻辑来填报志愿?
  6. 无lnternet_为什么无internet访问权限,无lnternet访问权限怎么办
  7. C措辞教程第二章: 数据范例、运算符、表达式(4)
  8. Template /template/pimple/a.ftl not found
  9. SpringBoot 集成SpringSecurity整体流程
  10. java 中介模式_java设计模式-中介者模式