-
最近發現語音驗證碼越來越流行,例如有次在註冊gmail信箱看過,還有msn頁面也有語音驗證碼,還有國外一些網站等。
花時間研究了下,語音驗證碼主要跟一般驗證碼的差別就在於如何讓驗證碼播放。本文語音驗證碼原理:從伺服器產生驗證碼,
並保存到cookie中(getcode.aspx.cs),當點收聽驗證碼的時候,調用javascirpt操作(這裡使用jquery)cookie讀取驗證碼,
然後把驗證碼傳到codevoice.aspx頁,然後按順序把驗證碼合成生成一個mp3文件,最後把這個文件傳入flash中播放,
你將收聽的聲音為:「目前驗證碼是5678請輸入」。這個原理也是大部分網站使用的語音驗證碼原理類似。
原始碼下載:下載(請使用VS2008 SP1或VS2010開啟)
頁面上放置驗證碼圖片頁面代碼
view plaincopy to clipboardprint?
點收聽驗證碼時呼叫的js函數如下:
view plaincopy to clipboardprint?
function playvoice(id) {
var voiceid = document.getElementById(id);
var voicecode = $.cookie('ValidateCode');
voiceid.innerHTML = " FlashVars='isPlay=1&url=codevoice.aspx&code=" + voicecode + "' width='0' height='0' allowScriptAccess='always'
ype='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />";
}
function playvoice(id) {
var voiceid = document.getElementById(id);
var voicecode = $.cookie('ValidateCode');
voiceid.innerHTML = " 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' />";
}
其中$.cookie('ValidateCode')是讀取cookie驗證碼,這裡使用了一個jquery操作cookie插件
產生mp3頁面程式碼如下:
//讀取驗證碼產生mp3,這裡包括頭begin.mp3和尾部end.mp3
view plaincopy to clipboardprint?
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");
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位址
view plaincopy to clipboardprint?
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;
}