Hey friends, today in this blog, you’ll learn how to create Custom Captcha in HTML CSS & JavaScript. In the earlier blog, I have shared how to Detect User Browser using JavaScript, and it’s time to create a simple captcha program.
Mostly, Captcha is used on the comment or contact form of the websites to restrict robots (bot) from commenting on a blog post or sending a message to the admin. There can be random images or codes in the captcha, and the users must have to select correct images or match the codes to complete their task.
In this small project [Custom Captcha in JavaScript], as you can see in the preview image, there is an image with the random 6 characters and numbers. You can also refresh the captcha code and get a new one using the reload button.
In the input field, you have to enter the captcha codes that are shown on the image. If your codes matched with the captcha codes, then there is appears a success message else there appears an error message. If you’ve matched the codes, then after 4 seconds there will be generated a new one captcha code.
Video Tutorial of Create Custom Captcha in JavaScript
In the video, you have seen the demo of this custom captcha and the codes behind creating this captcha. I have already told you that I used HTML CSS & JavaScript. With the help of JavaScript, I generated random 6 characters and check these with the user value.
I hope you liked this simple captcha program and want to get source codes but don’t worry I have given codes and source code files at the bottom of this page from where you can copy-paste codes or download the source code files.
But before copying codes, let’s understand the basic codes and concepts of this program. At first, in the JavaScript file, I have stored all characters and numbers in the array, then inside for loop, using Math.random() function I got 6 random characters from the given array.
And passed these codes or characters in the captcha by adding space between each character. After this, I got user-entered values, split them, and joined them with space (‘ ‘) so users don’t need to enter spaces to match the codes.
Once I joined the user values then I matched this user value with the captcha codes. If the value is not matched I’ve shown an error message, and if the value is matched I’ve shown a success message and generate the new random codes after 4 seconds using the setTimeout() function.
You might like this:
- AdBlocker Detection Program
- File Upload with Progress Bar
- Detect User Browser in JavaScript
- Login Form Validation in JavaScript
Create Custom Captcha in JavaScript [Source Codes]
To create this program [Custom Captcha in JavaScript]. First, you need to create three Files: HTML, CSS & JavaScript File. After creating these files just paste the following codes into your file. You can also download the source code files of this Captcha program from the given download button.
First, create an HTML file with the name of index.html and paste the given codes into your HTML file. You’ve to create a file with .html extension and remember the image that is used on this program will not appear. So download code files to use images also.
<!DOCTYPE html> <!-- Coding By CodingNepal - youtube.com/codingnepal --> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Custom Captcha in JavaScript | CodingNepal</title> <link rel="stylesheet" href="style.css"> <!-- Font Awesome CDN Link for Icons --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"/> </head> <body> <div class="wrapper"> <header>Captcha in JavaScript</header> <div class="captcha-area"> <div class="captcha-img"> <img src="captcha-bg.png" alt="Captch Background"> <span class="captcha"></span> </div> <button class="reload-btn"><i class="fas fa-redo-alt"></i></button> </div> <form action="#" class="input-area"> <input type="text" placeholder="Enter captcha" maxlength="6" spellcheck="false" required> <button class="check-btn">Check</button> </form> <div class="status-text"></div> </div> <script src="script.js"></script> </body> </html>
Second, create a CSS file with the name of style.css and paste the given codes in your CSS file. Remember, you’ve to create a file with .css extension.
/* Import Google font - Poppins & Noto */ @import url('https://fonts.googleapis.com/css2?family=Noto+Serif:ital@1&family=Poppins:wght@400;500;600&display=swap'); *{ margin: 0; padding: 0; box-sizing: border-box; font-family: "Poppins", sans-serif; } ::selection{ color: #fff; background: #4db2ec; } body{ display: flex; align-items: center; justify-content: center; min-height: 100vh; background: #4db2ec; } .wrapper{ max-width: 485px; width: 100%; background: #fff; padding: 22px 30px 40px; border-radius: 10px; box-shadow: 8px 8px 8px rgba(0, 0, 0, 0.05); } .wrapper header{ color: #4db2ec; font-size: 33px; font-weight: 500; text-align: center; } .wrapper .captcha-area{ display: flex; height: 65px; margin: 30px 0 20px; align-items: center; justify-content: space-between; } .captcha-area .captcha-img{ height: 100%; width: 345px; user-select: none; background: #000; border-radius: 5px; position: relative; } .captcha-img img{ width: 100%; height: 100%; object-fit: cover; border-radius: 5px; opacity: 0.95; } .captcha-img .captcha{ position: absolute; left: 50%; top: 50%; width: 100%; color: #fff; font-size: 35px; text-align: center; letter-spacing: 10px; transform: translate(-50%, -50%); text-shadow: 0px 0px 2px #b1b1b1; font-family: 'Noto Serif', serif; } .wrapper button{ outline: none; border: none; color: #fff; cursor: pointer; background: #4db2ec; border-radius: 5px; transition: all 0.3s ease; } .wrapper button:hover{ background: #2fa5e9; } .captcha-area .reload-btn{ width: 75px; height: 100%; font-size: 25px; } .captcha-area .reload-btn i{ transition: transform 0.3s ease; } .captcha-area .reload-btn:hover i{ transform: rotate(15deg); } .wrapper .input-area{ height: 60px; width: 100%; position: relative; } .input-area input{ width: 100%; height: 100%; outline: none; padding-left: 20px; font-size: 20px; border-radius: 5px; border: 1px solid #bfbfbf; } .input-area input:is(:focus, :valid){ padding-left: 19px; border: 2px solid #4db2ec; } .input-area input::placeholder{ color: #bfbfbf; } .input-area .check-btn{ position: absolute; right: 7px; top: 50%; font-size: 17px; height: 45px; padding: 0 20px; opacity: 0; pointer-events: none; transform: translateY(-50%); } .input-area input:valid + .check-btn{ opacity: 1; pointer-events: auto; } .wrapper .status-text{ display: none; font-size: 18px; text-align: center; margin: 20px 0 -5px; } @media (max-width: 506px){ body{ padding: 0 10px; } .wrapper{ padding: 22px 25px 35px; } .wrapper header{ font-size: 25px; } .wrapper .captcha-area{ height: 60px; } .captcha-area .captcha{ font-size: 28px; letter-spacing: 5px; } .captcha-area .reload-btn{ width: 60px; margin-left: 5px; font-size: 20px; } .wrapper .input-area{ height: 55px; } .input-area .check-btn{ height: 40px; } .wrapper .status-text{ font-size: 15px; } .captcha-area .captcha-img{ width: 250px; } }
Last, create a JavaScript file with the name of script.js and paste the given codes in your JavaScript file. Remember, you’ve to create a file with .js extension.
const captcha = document.querySelector(".captcha"), reloadBtn = document.querySelector(".reload-btn"), inputField = document.querySelector(".input-area input"), checkBtn = document.querySelector(".check-btn"), statusTxt = document.querySelector(".status-text"); //storing all captcha characters in array let allCharacters = ['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]; function getCaptcha(){ for (let i = 0; i < 6; i++) { //getting 6 random characters from the array let randomCharacter = allCharacters[Math.floor(Math.random() * allCharacters.length)]; captcha.innerText += ` ${randomCharacter}`; //passing 6 random characters inside captcha innerText } } getCaptcha(); //calling getCaptcha when the page open //calling getCaptcha & removeContent on the reload btn click reloadBtn.addEventListener("click", ()=>{ removeContent(); getCaptcha(); }); checkBtn.addEventListener("click", e =>{ e.preventDefault(); //preventing button from it's default behaviour statusTxt.style.display = "block"; //adding space after each character of user entered values because I've added spaces while generating captcha let inputVal = inputField.value.split('').join(' '); if(inputVal == captcha.innerText){ //if captcha matched statusTxt.style.color = "#4db2ec"; statusTxt.innerText = "Nice! You don't appear to be a robot."; setTimeout(()=>{ //calling removeContent & getCaptcha after 2 seconds removeContent(); getCaptcha(); }, 2000); }else{ statusTxt.style.color = "#ff0000"; statusTxt.innerText = "Captcha not matched. Please try again!"; } }); function removeContent(){ inputField.value = ""; captcha.innerText = ""; statusTxt.style.display = "none"; }
That’s all, now you’ve successfully created a Custom Captcha in HTML CSS & JavaScript. If your code doesn’t work or you’ve faced any error/problem, please download the source code files from the given download button. It’s free and a .zip file will be downloaded then you’ve to extract it.
nice page
I am very much attracted by your contents
good job!
Is it possible to automatically validate the code without the check button?
Can the verification message be shortened by showing a true or false image under the reload button?
best regards!
very nice but how to use it with Contact Form now ? 🙂
nice page
best coder
Really nice
Thank you for giving this code files free! I used one of your login and sign up form in my website! i definitely left a thank you to you in my website and subscribed to your channel too!
Many many thanks to you!