1. <!DOCTYPE html>
    2. <html >
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>发送验证码</title>
    6. <style>
    7. .contain{
    8. width:400px;
    9. height:200px;
    10. margin:100px auto;
    11. }
    12. .input-val {
    13. width: 120px;
    14. height: 32px;
    15. border: 1px solid #ddd;
    16. box-sizing: border-box;
    17. }
    18. #canvas {
    19. vertical-align: middle;
    20. box-sizing: border-box;
    21. border: 1px solid #ddd;
    22. cursor: pointer;
    23. }
    24. .btn {
    25. display: block;
    26. margin-top: 20px;
    27. height: 32px;
    28. width: 100px;
    29. font-size: 16px;
    30. color: #fff;
    31. background-color: #457adb;
    32. border: none;
    33. border-radius: 50px;
    34. }
    35. </style>
    36. </head>
    37. <body>
    38. <div class="contain">
    39. <div class="code">
    40. <input type="text" value="" placeholder="请输入验证码" class="input-val">
    41. <canvas id="canvas" width="100" height="30"></canvas>
    42. <button class="btn">提交</button>
    43. </div>
    44. </div>
    45. <script src="http://www.lanrenzhijia.com/ajaxjs/jquery.min.js"></script>
    46. <script>
    47. $(function(){
    48. var show_num = [];
    49. draw(show_num);
    50. $("#canvas").on('click',function(){
    51. draw(show_num);
    52. })
    53. $(".btn").on('click',function(){
    54. var val = $(".input-val").val().toLowerCase();
    55. var num = show_num.join(""); //用于把数组中的所有元素放入一个字符串。
    56. if(val==''){
    57. alert('请输入验证码!');
    58. }else if(val == num){
    59. alert('提交成功!');
    60. $(".input-val").val('');
    61. // draw(show_num);
    62. }else{
    63. alert('验证码错误!请重新输入!');
    64. $(".input-val").val('');
    65. // draw(show_num);
    66. }
    67. })
    68. })
    69. //生成并渲染出验证码图形
    70. function draw(show_num) {
    71. var canvas_width=$('#canvas').width();
    72. var canvas_height=$('#canvas').height();
    73. var canvas = document.getElementById("canvas");//获取到canvas的对象
    74. var context = canvas.getContext("2d");//获取到canvas画图的环境
    75. canvas.width = canvas_width;
    76. canvas.height = canvas_height;
    77. var sCode = "a,b,c,d,e,f,g,h,i,j,k,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0";
    78. var aCode = sCode.split(","); //把字符串分割成字符串数组。
    79. var aLength = aCode.length;//获取到数组的长度
    80. for (var i = 0; i < 4; i++) { //这里的for循环可以控制验证码位数(如果想显示6位数,4改成6即可)
    81. var j = Math.floor(Math.random() * aLength);//获取到随机的索引值,random() 方法可返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。
    82. // var deg = Math.random() * 30 * Math.PI / 180;//产生0~30之间的随机弧度
    83. var deg = Math.random() - 0.5; //产生一个随机弧度
    84. var txt = aCode[j];//得到随机的一个内容
    85. show_num[i] = txt.toLowerCase();
    86. var x = 10 + i * 20;//文字在canvas上的x坐标
    87. var y = 20 + Math.random() * 8;//文字在canvas上的y坐标
    88. context.font = "bold 23px 微软雅黑";
    89. context.translate(x, y);
    90. context.rotate(deg);
    91. context.fillStyle = randomColor();
    92. context.fillText(txt, 0, 0);
    93. context.rotate(-deg);
    94. context.translate(-x, -y);
    95. }
    96. for (var i = 0; i <= 5; i++) { //验证码上显示线条
    97. context.strokeStyle = randomColor();
    98. context.beginPath();
    99. context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
    100. context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
    101. context.stroke();
    102. }
    103. for (var i = 0; i <= 30; i++) { //验证码上显示小点
    104. context.strokeStyle = randomColor();
    105. context.beginPath();
    106. var x = Math.random() * canvas_width;
    107. var y = Math.random() * canvas_height;
    108. context.moveTo(x, y);
    109. context.lineTo(x + 1, y + 1);
    110. context.stroke();
    111. }
    112. }
    113. //得到随机的颜色值
    114. function randomColor() {
    115. var r = Math.floor(Math.random() * 256);
    116. var g = Math.floor(Math.random() * 256);
    117. var b = Math.floor(Math.random() * 256);
    118. return "rgb(" + r + "," + g + "," + b + ")";
    119. }
    120. </script>
    121. </body>
    122. </html>