最近发现语音验证码越来越流行,比如有次在注册gmail邮箱看到过,还有msn页面也有语音验证码,还有国外一些网站等。
花时间研究了下,语音验证码主要跟一般验证码的区别就在于如何让验证码播放。本文语音验证码原理:从服务器生成验证码,
并保存到cookie中(getcode.aspx.cs),当点收听验证码的时候,调用javascirpt操作(这里使用jquery)cookie读取验证码,
然后把验证码传到codevoice.aspx页,然后按顺序把验证码合成生成一个mp3文件,最后把这个文件传入flash中播放,
你将收听的声音为:“当前验证码是5678请输入”。这个原理也是大部分网站使用的语音验证码原理类似。
源码下载:下载(请使用VS2008 SP1或VS2010打开)
页面上放置验证码图片页面代码
< div >
< input type ="text" name ="txtCode" id ="txtCode" maxlength ="8" />
< img onclick ="this.src='getcode.aspx';" src ="getcode.aspx" align ="absmiddle" style ="cursor: pointer" alt ="看不清楚,换一张" title ="看不清楚,换一张" />
< img id ="imgRead" src ="image/maintb.gif" align ="absmiddle" style ="cursor: pointer" alt ="收听验证码" title ="收听验证码" onclick ="playvoice('player');" />
< span id ="player" ></ span >
</ div >
</ form >
点收听验证码时调用的js函数如下:
var voiceid = document.getElementById(id);
var voicecode = $.cookie('ValidateCode');
voiceid.innerHTML = " < embed id ='sound_play' name ='sound_play' src ='sound_play.swf?" + (new Date().getTime()) + "'
FlashVars ='isPlay=1&url=codevoice.aspx&code=" + voicecode + "' width ='0' height ='0' allowScriptAccess ='always'
type ='application/x-shockwave-flash' pluginspage ='http://www.macromedia.com/go/getflashplayer' /></ embed > ";
}
其中$.cookie('ValidateCode')是读取cookie验证码,这里使用了一个jquery操作cookie插件
生成mp3页面代码如下:
//读取验证码生成mp3,这里包括头部begin.mp3和尾部end.mp3
Response.WriteFile( " sound/begin.mp3 " );
string checkCode = HttpContext.Current.Request.QueryString[ " code " ].ToString(); // string checkCode ="8888";
if (checkCode.Length > 0 )
for ( int i = 0 ; i < checkCode.Length; i ++ )
{
Response.WriteFile( " sound/ " + checkCode[i] + " .mp3 " );
}
Response.WriteFile( " sound/end.mp3 " );
【本文作者分别在cnblogs,csdn,http://www.ajaxcn.net/同步发布,转载请保留此说明】
flash播放代码主要在第一帧关键帧右击动作,插入以下代码根据传入的播放数字mp3地址
var mysong = url;
var isPlay = 1 ;
var intnum:Number = setInterval(playSong, 500 );
function playSong() {
if (isPlay == 1 ) {
mysound.loadSound(mysong + " ?code= " + code, true );
mysound.start();
clearInterval(intnum);
isPlay = 0 ;
}
}
另外特别说明:此源码参考了开源CMS中的登录页:JumbotCms