JavaScript Canvas 인증 코드 구현
인증 코드 는 보통 PHP 와 자바 등 백 엔 드 언어 로 작 성 됩 니 다.
하지만 전면 에 서 는 canva 나 SVG 로 인증 코드 를 그 릴 수 있 습 니 다.
인증 코드 를 그 리 는 것 은 간단 한 무 작위 문자열 이 아니 라 화면 에 방해 항목 이 있어 야 합 니 다.
예 를 들 어 간섭 선분,간섭 원점,배경 등 이다.
이곳 의 이 demo 의 canvas 인증 코드 방해 항목 은 비교적 간단 하 다.
그림 에서 본 사례 의 간섭 항목 을 볼 수 있다.
canvas 인증 코드 전시 효과:
클릭 하여 변경(다시 그리 기)인증 코드 구현:
콘 솔 에서 함수 출력 반환 값 을 실행 합 니 다(인증 코드):
원본 코드:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>canvas </title>
</head>
<body>
<canvas width="200" height="60" id="check" style="border:1px solid #000;"> canvas !</canvas>
<script>
var ctx = document.getElementById("check").getContext("2d");
var ctxW = document.getElementById("check").clientWidth;
var ctxH = document.getElementById("check").clientHeight;
/**
*
* @param {[Number]} min [ ]
* @param {[Number]} max [ ]
* @return {[Number]} [ ]
*/
function ranNum(min, max) {
return Math.random() * (max - min) + min;
}
/**
*
* @param {[Number]} min [ ]
* @param {[Number]} max [ ]
* @return {[String]} [ ]
*/
function ranColor(min, max) {
var r = ranNum(min, max);
var g = ranNum(min, max);
var b = ranNum(min, max);
// return "rgb(" + r + "," + g + "," + b + ")";
return `rgb(${r},${g},${b})`;
}
/**
*
* @return {[Array]} [ ]
*/
function ranStr() {
var str = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
return str.split("").sort(function () {
return Math.random() - 0.5
});
}
/**
*
* @param {[String]} canvasId [canvas id]
* @param {[Number]} canvasW [canvas width]
* @param {[Number]} canvasH [canvas height]
* @param {[Number]} num [ ]
* @param {[Number]} fsMin [ ]
* @param {[Number]} fsMax [ ]
* @param {[Number]} frMin [ ]
* @param {[Number]} frMax [ ]
* @param {[Number]} min [ ]
* @param {[Number]} max [ ]
* @return {[String]} [ ]
*/
function drawText(canvasId, canvasW, canvasH, num, fsMin, fsMax, frMin, frMax, min, max) {
var str = "";
for (var i = 0; i < num; i++) {
var char = ranStr()[Math.floor(0, ranStr().length)];
var fs = ranNum(fsMin, fsMax);
canvasId.font = fs + "px Verdana";
canvasId.fillStyle = ranColor(min, max);
//
canvasId.save();
// context.translate(x,y);
// x (x)
// y (y)
//
canvasId.translate(canvasW / num * i + canvasW / 20, 0);
//
canvasId.rotate(ranNum(frMin, frMax) * Math.PI / 180);
// context.fillText(text,x,y,maxWidth);
// text 。
// x x ( )。
// y y ( )。
// maxWidth 。 , 。
canvasId.fillText(char, 0, (canvasH + fs) / 2.5, canvasW / num);
//
ctx.restore();
str += char;
}
// console.log(str);
return str;
}
/**
*
* @param {[String]} canvasId [canvas id]
* @param {[Number]} canvasW [canvas width]
* @param {[Number]} canvasH [canvas height]
* @param {[Number]} min [ ]
* @param {[Number]} max [ ]
*/
function drawBg(canvasId, canvasW, canvasH, min, max) {
// canvas
canvasId.fillStyle = ranColor(min, max);
//
canvasId.fillRect(0, 0, canvasW, canvasH);
}
/**
*
* @param {[String]} canvasId [canvas id]
* @param {[Number]} canvasW [canvas width]
* @param {[Number]} canvasH [canvas height]
* @param {[Number]} num [ ]
* @param {[Number]} r [ ]
* @param {[Number]} min [ ]
* @param {[Number]} max [ ]
*/
function drawCircle(canvasId, canvasW, canvasH, num, r, min, max) {
for (var i = 0; i < num; i++) {
// ( )
canvasId.beginPath();
// context.arc(x,y,r,sAngle,eAngle,counterclockwise); ( )
// x x 。
// y y 。
// r 。
// sAngle , 。( 0 )。
// eAngle , 。
// counterclockwise 。 。False = ,true = 。
canvasId.arc(ranNum(0, canvasW), ranNum(0, canvasH), r, 0, 2 * Math.PI);
//
canvasId.fillStyle = ranColor(min, max);
//
canvasId.fill();
// ( )
canvasId.closePath();
}
}
/**
*
* @param {[String]} canvasId [canvas id]
* @param {[Number]} canvasW [canvas width]
* @param {[Number]} canvasH [canvas height]
* @param {[Number]} num [ ]
* @param {[Number]} min [ ]
* @param {[Number]} max [ ]
*/
function drawLine(canvasId, canvasW, canvasH, num, min, max) {
for (var i = 0; i < num; i++) {
// ( )
canvasId.beginPath();
//
canvasId.moveTo(ranNum(0, canvasW), ranNum(0, canvasH));
//
canvasId.lineTo(ranNum(0, canvasW), ranNum(0, canvasH));
canvasId.strokeStyle = ranColor(min, max);
canvasId.stroke();
canvasId.closePath();
}
}
//
function drawCanvas() {
// canvas
ctx.clearRect(0, 0, 200, 60);
//
drawBg(ctx, ctxW, ctxH, 200, 255);
//
drawCircle(ctx, ctxW, ctxH, 20, 5, 200, 255);
//
drawLine(ctx, ctxW, ctxH, 20, 0, 255);
//
var str = drawText(ctx, ctxW, ctxH, 4, 10, 50, -30, 30, 0, 100);
return str;
}
drawCanvas();
document.getElementById('check').onclick = drawCanvas;
</script>
</body>
</html>
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.