基于canvas制作随机生成数字英文组合验证码效果,点击或刷新会自动重组。输入验证码提交验证效果代码。

     <div class="verification">
<input type="text" value="" placeholder="请输入验证码(不区分大小写)" id="verInput">
<canvas id="verCanvas" width="80" height="28"></canvas>
<button id="verSubmit" onclick="verify()">提交</button>
</div> <script type="text/javascript" src="makeCode.js"></script>
<script type="text/javascript">
var verCanvas = document.getElementById("verCanvas");
var verValue = makeCode(verCanvas);
verCanvas.onclick = function(){
verValue = makeCode(verCanvas);
};
function verify(){
var value = document.getElementById("verInput").value;
if(value.toLowerCase()==verValue){
alert("验证成功")
}else{
alert("验证失败")
}
}
</script>
function makeCode(canvas, codeLenght) {
codeLenght = codeLenght || 4; //默认4个字符
var valueArr = [];
var canvasWidth = canvas.width;
var canvasHeight = canvas.height;
var context = canvas.getContext("2d");
context.clearRect(0,0,canvasWidth,canvasHeight);
//设置所有可能出现的字符
var codeLib = ["A", "B", "C", "E", "F", "G", "H", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "W", "X", "Y", "a", "b", "c", "d", "e", "f", "h", "k", "m", "n", "p", "r", "s", "t", "w", "x", "y", "z", "3", "4", "5", "6", "8"];
var codeLibLength = codeLib.length;
for (var i = 0; i < codeLenght; i++) {
// 获得随机字符
var txt = codeLib[parseInt(Math.random() * codeLibLength)];
valueArr.push(txt.toLowerCase());
//产生-20~20之间的随机弧度
var deg = (Math.random() * 40-20) * Math.PI / 180;
//文字在canvas上的坐标位置
var x = (canvasWidth / (codeLenght + 1)) * (i + 0.5);
var y = Math.random()*(canvasHeight*1/5)+(canvasHeight*7/10);
//字体设置
var fontSize = canvasHeight*3/4;
context.font = "bold " + fontSize + "px 微软雅黑";
context.translate(x, y);
context.rotate(deg);
context.fillStyle = "rgb("+parseInt(Math.random()*200)+","+parseInt(Math.random()*200)+","+parseInt(Math.random()*200)+")";
context.fillText(txt, 0, 0);
context.rotate(-deg);
context.translate(-x, -y);
}
//验证码上显示线条
for (var i = 0; i<5; i++) {
context.strokeStyle = "rgb("+parseInt(Math.random()*100+155)+","+parseInt(Math.random()*100+155)+","+parseInt(Math.random()*100+155)+")";
context.beginPath();
context.moveTo(Math.random() * canvasWidth, Math.random() * canvasHeight);
context.lineTo(Math.random() * canvasWidth, Math.random() * canvasHeight);
context.stroke();
}
//验证码上显示小点
for (var i = 0; i <= 24; i++) {
context.strokeStyle = "rgb("+parseInt(Math.random()*100+155)+","+parseInt(Math.random()*100+155)+","+parseInt(Math.random()*100+155)+")";
context.beginPath();
var x = Math.random() * canvasWidth;
var y = Math.random() * canvasHeight;
context.moveTo(x, y);
context.lineTo(x + 1, y + 1);
context.stroke();
}
//返回当前验证码的值
return valueArr.join("");
}

canvas验证码 - 随机字母数字的更多相关文章

  1. 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串

    一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...

  2. java实现随机字母数字验证码

    生成随街验证码 VerifyCode 工具类 package com.meeno.common.cerifycode; import javax.imageio.ImageIO; import jav ...

  3. php生成纯数字、字母数字、图片、纯汉字的随机数验证码

    现在讲开始通过PHP生成各种验证码旅途,新手要开车了,请刷卡! 首先,我们开始先生成一个放验证码的背景图片 注:没有Imagejpg()这个函数,只有imagepng()函数 imagecreatet ...

  4. JS生成随机的由字母数字组合的字符串

    前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法   1 Math.random().toString(36).substr( ...

  5. js随机生成字母数字组合的字符串 随机动画数字

    效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...

  6. 使用JavaScript随机生成数字混合字母的验证码

      <script> // 封装一个随机生成数字的函数 function random(a, b) { var n = Math.round(Math.random() * (a - b) ...

  7. canvas实现随机验证码

    canvas实现随机验证码 知识点 canvas生成背景图和文字 设置字体样式和大小 String的fromCharCode(code码)生成大小写字母和数字 str.toLowerCase()转小写 ...

  8. canvas制作随机验证码

    看到人家彩色背景的验证码想测试一下: 创建html代码: <canvas id="myCanvas" width="200" height="1 ...

  9. PHP字母数字验证码和中文验证码

    1:字母数字组合的验证码 HTML代码: 验证码:<input type="text" name="code"> <img onclick=& ...

随机推荐

  1. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  2. 搭建互联网架构学习--003--maven以及nexus私服搭建

    跳过,等待完善中,,, 后台服务工具maven:使用Nexus配置Maven私有仓库 一.安装配置Nexus 1. 下载nexus https://www.sonatype.com/download- ...

  3. 9.png图片制作详细教程

    1.背景自适应且不失真问题的存在      制作自适应背景图片是UI开发的一个广泛问题,也是界面设计师渴望解决的问题,我相信我们彼此都深有体会.      比如,列表的背景图一定,但是列表的高度随着列 ...

  4. 问题记录 | VScode中使用IntelliJ的快捷键

    问题记录 | VScode中使用IntelliJ的快捷键 主要想用ctrl+alt+l格式化Python代码 安装VScode的插件:IntelliJ IDEA Keybindings 安装方法: I ...

  5. nginx 超时问题: upstream timed out (110: Connection timed out) while reading response header from upstream

    目录 错误内容 错误原因 错误解决办法 错误内容 我们可以在error.log 里面可以看到 错误内容:upstream timed out (110: Connection timed out) w ...

  6. 安装scrapy报错 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

    报错内容:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools" ...

  7. Pascal的3种注释

    1.单行注释 {大括号里的内容都被注释掉} 2.单行注释2 //这种注释几乎是绝大部分语言中通用的了 3.多行注释 (*pascal的多行注释有点奇怪,使用的是:括号+星号的方式*)       其他 ...

  8. zookeeper集群搭建及Leader选举算法源码解析

    第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...

  9. Nginx反向代理实现会话(session)保持的两种方式 (转)

    http://blog.csdn.net/gaoqiao1988/article/details/53390352 一.ip_hash: ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同 ...

  10. springMVC中ModelAndView学写笔记

    api介绍: 构造函数摘要 ModelAndView()           bean样式用法的默认构造函数:填充bean属性,而不是传递构造函数参数. ModelAndView(Object vie ...