最近发现语音验证码越来越流行,比如有次在注册gmail邮箱看到过,还有msn页面也有语音验证码,还有国外一些网站等。
花时间研究了下,语音验证码主要跟一般验证码的区别就在于如何让验证码播放。本文语音验证码原理:从服务器生成验证码,
并保存到cookie中(getcode.aspx.cs),当点收听验证码的时候,调用javascirpt操作(这里使用jquery)cookie读取验证码,
然后把验证码传到codevoice.aspx页,然后按顺序把验证码合成生成一个mp3文件,最后把这个文件传入flash中播放,
你将收听的声音为:“当前验证码是5678请输入”。这个原理也是大部分网站使用的语音验证码原理类似。
源码下载:下载(请使用VS2008 SP1或VS2010打开)
页面上放置验证码图片页面代码
<
form
id
="form1"
runat
="server"
>
<
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函数如下:
function playvoice(id) {
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.ContentType
=
"
audio/mpeg
"
;
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 mysound
=
new
Sound();
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