(function() { // Private array of chars to use var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); Math.uuid = function (len, radix) { var chars = CHARS, uuid = [], i; radix = radix || chars.length; if (len) { // Compact form for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; } else { // rfc4122, version 4 form var r; // rfc4122 requires these characters uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; // Fill in random data. At i==19 set the high bits of clock sequence as // per rfc4122, sec. 4.1.5 for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random()*16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); }; // A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance // by minimizing calls to random() Math.uuidFast = function() { var chars = CHARS, uuid = new Array(36), rnd=0, r; for (var i = 0; i < 36; i++) { if (i==8 || i==13 || i==18 || i==23) { uuid[i] = '-'; } else if (i==14) { uuid[i] = '4'; } else { if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0; r = rnd & 0xf; rnd = rnd >> 4; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } return uuid.join(''); }; // A more compact, but less performant, RFC4122v4 solution: Math.uuidCompact = function() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }); }; })(); (function($) { $.fn.ycaptcha = function(options) { var settings = $.extend({}, {glAppId: "yourAppId",glCaptchaCode:"#glCaptchaCode",onCheck:$.noop}, options); var captchaUrl = getDomainName("web-ycaptcha.yaoex.com", 4); // var captchaUrl = "http://localhost/ycaptcha-web"; var glCaptchaId = Math.uuid(); var glCaptchaCodeInput = settings.glCaptchaCode; var glAppId = settings.glAppId; var glCaptchaToken = "#glCaptchaToken"; $(this).click(onClick); var url = captchaUrl+"/getcode?glAppId="+glAppId+"&glCaptchaId="+glCaptchaId+"&t="+Math.random(); $(this).attr("src",url); $(glCaptchaCodeInput).keyup(function(e){ var glCaptchaCode = $(glCaptchaCodeInput).val(); if (glCaptchaCode.length!=4) return; if(e.which == 13) { return; } $.ajax({ url: captchaUrl+"/checkfrontjsonp?jsoncallback=?", type: "get",data:{ "glAppId":glAppId, "glCaptchaId":glCaptchaId, "glCaptchaCode":glCaptchaCode}, dataType: "jsonp", success: function(data) { if (data.result==true){ $(glCaptchaToken).val(data.glCaptchaToken); } if(settings.onCheck) { settings.onCheck(data); } } }); }); return this; function onClick() { var url = captchaUrl+"/getcode?glAppId="+glAppId+"&glCaptchaId="+glCaptchaId+"&t="+Math.random(); $(this).attr("src",url); return ; } function inputOnChange(e){ var glCaptchaCode = $(glCaptchaCodeInput).val(); if (glCaptchaCode.length!=4) return; if(e.which == 13) { return; } $.ajax({ url: captchaUrl+"/checkfrontjsonp?jsoncallback=?", type: "get",data:{ "glAppId":glAppId, "glCaptchaId":glCaptchaId, "glCaptchaCode":glCaptchaCode}, dataType: "jsonp", success: function(data) { if (data.result==true){ $(glCaptchaToken).val(data.glCaptchaToken); } if(settings.onCheck) { settings.onCheck(data); } } }); }; } })(jQuery); function getDomainName(domain, viewType) { var domainName = ""; $.ajax({ url : "/passport/domain/name.do", data : { "domain" : domain, "viewType" : viewType }, cache:false, async : false, success : function(data) { domainName = data; } }); return domainName; };