使用JavaScript,如何生成汉字验证码?
天蓬老师
天蓬老师 2017-04-10 15:38:06
[JavaScript讨论组]

我现在有一个需求,要生成汉字的验证码,如何用js随机生成汉字?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网

解:
根据题目要求,产生随机汉字,我们只学过随机数字,没有见过随机汉字,
但二者是一个映射的关系,故必须找到汉字与数字的关系。
根据此思路,根据网上百度到的正则表达式匹配中文的答案[\u4e00-\u9fa5]
然后再

parseInt("4E00",16)
>> 19968

parseInt("9FA5",16)
>> 40869

40869-19968
>> 20901

于是就有了下面的代码

randomHz=function(){
    eval( "var word=" +  '"\\u' + (Math.round(Math.random() * 20901) + 19968).toString(16)+'"');
    return word;
}
for(i=0;i<100;i++){
    console.log(randomHz());
}

解毕

ps:
这只是理论解答,因为中文字符有近2w个,大家都是用的拼音,而不是五笔,人家根本打不出来的好不好。
你用来产生随机中文字符,必须是大家喜闻乐见的常用汉字!
所以你还是要回归最原始的办法——建立一个数组,放几十个或者几百个常见的字,然后随机产生一个随机数做索引访问即可。

PHP中文网

nodejs不懂怎样生成图片,说下思路。
分解下需求,楼主要一个验证码程序,既然是验证码,就应该得是图片,而且图片的url和参数不能和汉字有任何关联,因为有关联就能被机器人轻易的抓到链接从而破解,综上楼主需要的接口是:
1.一个随机生成汉字图片的接口 /gen_img.js =>返回 {"imgcode":"xxx","img":"base64"}
百度了一下貌似没有直接生成汉字图片的nodejs库,那就准备足够的单个汉字图片,存到服务器上,并且给每张图片一个id,录入一到张对应表里面,方便我们找对应关系。
/web/data/1.jpg 中
/web/data/2.jpg 文
...
/web/data/n.jpg 字
接口拿到对应表之后就可以轻易的生成n个不重复的随机数和n个汉字,由这n个随机数取n张图片,合成一张图片。因为图片不会太大,可以直接编码成base64(又或者放到网站的public目录下,接口就直接返回一个url)。随机再生成一个imgcode,给这个图片一个code,用来给下一步做验证。这个code和上面生成的n个汉字需要在会话中保存下来

2.根据图片id+输入汉字验证输入的正确性的接口 /verify.js?key=xxx&imgcode=xxx
从会话里拿出code和汉字,和传过来的code+key对比

合成图片可以使用 GraphicsMagick http://aheckmann.github.io/gm/docs.html

巴扎黑

验证码 用js来写,意义不大, 关掉了js不就over了?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号