-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathscript.js
More file actions
107 lines (90 loc) · 3 KB
/
script.js
File metadata and controls
107 lines (90 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
let captchaText = document.getElementById('captcha');
let ctx = captchaText.getContext("2d");
ctx.font = "30px Roboto";
ctx.fillStyle = "#08e5ff";
let userText = document.getElementById('textBox');
let submitButton = document.getElementById('submitButton');
let output = document.getElementById('output');
let refreshButton = document.getElementById('refreshButton');
let alphaNums = [
'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z', 'a', 'b',
'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9'
];
let c = "";
function generateCaptcha() {
userText.value = "";
output.innerHTML = "";
ctx.clearRect(0, 0, captchaText.width, captchaText.height);
let captchaArray = [];
for (let i = 0; i < 7; i++) {
captchaArray.push(alphaNums[Math.floor(Math.random() * alphaNums.length)]);
}
c = captchaArray.join('');
ctx.fillText(c, captchaText.width / 4, captchaText.height / 2);
// Add random lines
for (let i = 0; i < 5; i++) {
ctx.beginPath();
ctx.moveTo(Math.random() * captchaText.width, Math.random() * captchaText.height);
ctx.lineTo(Math.random() * captchaText.width, Math.random() * captchaText.height);
ctx.strokeStyle = getRandomColor();
ctx.lineWidth = 1;
ctx.stroke();
}
// Add random dots
for (let i = 0; i < 30; i++) {
ctx.beginPath();
ctx.arc(Math.random() * captchaText.width, Math.random() * captchaText.height, 1.5, 0, 2 * Math.PI);
ctx.fillStyle = getRandomColor();
ctx.fill();
}
}
function getRandomColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
// Initial CAPTCHA render
generateCaptcha();
// Event: Press Enter
userText.addEventListener('keyup', function (e) {
if (e.key === 'Enter') {
checkCaptcha();
}
});
// Event: Submit
submitButton.addEventListener('click', function () {
checkCaptcha();
});
// Event: Refresh
refreshButton.addEventListener('click', function () {
generateCaptcha();
});
// Function to validate CAPTCHA
function checkCaptcha() {
if (userText.value === c) {
output.classList.remove("incorrectCaptcha");
output.classList.add("correctCaptcha");
output.innerHTML = "✅ Correct!";
userText.disabled = true;
submitButton.disabled = true;
refreshButton.disabled = true;
setTimeout(() => {
alert("CAPTCHA verified! Proceeding...");
// window.location.href = "success.html"; // Uncomment to redirect
}, 2000);
} else {
output.classList.remove("correctCaptcha");
output.classList.add("incorrectCaptcha");
output.innerHTML = "❌ Incorrect, please try again!";
}
}