A CAPTCHA (Całkowicie zautomatyzowany publiczny test Turinga pozwalający odróżnić komputery od ludzi) to test mający na celu określenie, czy użytkownik jest człowiekiem, czy nie.
Zatem zadaniem jest wygenerowanie za każdym razem unikalnego CAPTCHA i stwierdzenie, czy użytkownik jest człowiekiem, czy nie, poprzez poproszenie użytkownika o wprowadzenie tego samego CAPTCHA, jaki został wygenerowany automatycznie i sprawdzenie danych wprowadzonych przez użytkownika za pomocą wygenerowanego CAPTCHA.
Przykłady:
postać normalna Greibacha
CAPTCHA: x9Pm72se Input: x9Pm62es Output: CAPTCHA Not Matched CAPTCHA: cF3yl9T4 Input: cF3yl9T4 Output: CAPTCHA Matched
Zestaw znaków do wygenerowania CAPTCHA jest przechowywany w tablicy znaków chrs[], która zawiera (a-z A-Z 0-9), dlatego rozmiar chrs[] wynosi 62.
Aby wygenerować unikalny kod CAPTCHA za każdym razem, gdy generowana jest liczba losowa przy użyciu funkcji Rand() (rand()%62), która generuje liczbę losową od 0 do 61, a wygenerowana liczba losowa jest traktowana jako indeks tablicy znaków, chrs[] generuje w ten sposób nowy znak captcha[] i ta pętla uruchamia się n (długość CAPTCHA) razy, aby wygenerować CAPTCHA o określonej długości.
Algorytm:
- Najpierw zadeklaruj i zdefiniuj funkcję checkCaptcha(), która przyjmuje dwa parametry łańcuchowe i zwraca wartość logiczną.
- W funkcji checkCaptcha() porównaj dwa parametry ciągu za pomocą funkcji Compare() i zwróć wartość true, jeśli są takie same; w przeciwnym razie zwróć wartość false.
- Zadeklaruj i zdefiniuj funkcję generateCaptcha(), która przyjmuje parametr całkowity i zwraca wartość łańcuchową.
- W funkcji generateCaptcha() zainicjuj zmienną czasu za pomocą funkcji time() i załaduj generator liczb losowych za pomocą funkcji srand().
- Zadeklaruj tablicę znaków zawierającą wszystkie znaki, które mają zostać uwzględnione w CAPTCHA i przypisz ją do zmiennej wskaźnikowej char.
- Wygeneruj losowy ciąg CAPTCHA o określonej długości, wielokrotnie dodając losowe znaki z tablicy znaków do zmiennej łańcuchowej za pomocą funkcji push_back().
- Zwróć wygenerowany ciąg CAPTCHA.
- W funkcji main() zadeklaruj zmienną łańcuchową o nazwie captcha i wywołaj funkcję generateCaptcha() o długości 9, aby wygenerować losowy ciąg znaków CAPTCHA.
- Wydrukuj wygenerowany ciąg CAPTCHA na konsoli.
// C++ program to automatically generate CAPTCHA and // verify user #include using namespace std; // Returns true if given two strings are same bool checkCaptcha(string& captcha string& user_captcha) { return captcha.compare(user_captcha) == 0; } // Generates a CAPTCHA of given length string generateCaptcha(int n) { time_t t; srand((unsigned)time(&t)); // Characters to be included char* chrs = 'abcdefghijklmnopqrstuvwxyzABCDEFGHI' 'JKLMNOPQRSTUVWXYZ0123456789'; // Generate n characters from above set and // add these characters to captcha. string captcha = ''; while (n--) captcha.push_back(chrs[rand() % 62]); return captcha; } // Driver code int main() { // Generate a random CAPTCHA string captcha = generateCaptcha(9); cout << captcha; // Ask user to enter a CAPTCHA string usr_captcha; cout << 'nEnter above CAPTCHA: '; cin >> usr_captcha; // Notify user about matching status if (checkCaptcha(captcha usr_captcha)) printf('nCAPTCHA Matched'); else printf('nCAPTCHA Not Matched'); return 0; }
Java // Java pprogram to automatically generate CAPTCHA and // verify user import java.util.*; import java.io.*; class GFG { // Returns true if given two strings are same static boolean checkCaptcha(String captcha String user_captcha) { return captcha.equals(user_captcha); } // Generates a CAPTCHA of given length static String generateCaptcha(int n) { //to generate random integers in the range [0-61] Random rand = new Random(62); // Characters to be included String chrs = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // Generate n characters from above set and // add these characters to captcha. String captcha = ''; while (n-->0){ int index = (int)(Math.random()*62); captcha+=chrs.charAt(index); } return captcha; } // Driver code public static void main(String[] args)throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // Generate a random CAPTCHA String captcha = generateCaptcha(9); System.out.println(captcha); // Ask user to enter a CAPTCHA System.out.println('Enter above CAPTCHA: '); String usr_captcha = reader.readLine(); // Notify user about matching status if (checkCaptcha(captcha usr_captcha)) System.out.println('CAPTCHA Matched'); else System.out.println('CAPTCHA Not Matched'); } } // This code is contributed by shruti456rawal
Python3 # Python program to automatically generate CAPTCHA and # verify user import random # Returns true if given two strings are same def checkCaptcha(captcha user_captcha): if captcha == user_captcha: return True return False # Generates a CAPTCHA of given length def generateCaptcha(n): # Characters to be included chrs = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' # Generate n characters from above set and # add these characters to captcha. captcha = '' while (n): captcha += chrs[random.randint(1 1000) % 62] n -= 1 return captcha # Driver code # Generate a random CAPTCHA captcha = generateCaptcha(9) print(captcha) # Ask user to enter a CAPTCHA print('Enter above CAPTCHA:') usr_captcha = input() # Notify user about matching status if (checkCaptcha(captcha usr_captcha)): print('CAPTCHA Matched') else: print('CAPTCHA Not Matched') # This code is contributed by shubhamsingh10
C# using System; using System.Text; class GFG { // Returns true if given two strings are same static bool CheckCaptcha(string captcha string user_captcha) { return captcha.Equals(user_captcha); } // Generates a CAPTCHA of given length static string GenerateCaptcha(int n) { // to generate random integers in the range [0-61] Random rand = new Random(); // Characters to be included string chrs = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // Generate n characters from above set and // add these characters to captcha. StringBuilder captcha = new StringBuilder(); while (n-- > 0) { int index = rand.Next(62); captcha.Append(chrs[index]); } return captcha.ToString(); } // Driver code static void Main(string[] args) { // Generate a random CAPTCHA string captcha = GenerateCaptcha(9); Console.WriteLine(captcha); // Ask user to enter a CAPTCHA Console.WriteLine('Enter above CAPTCHA: '); string usr_captcha = Console.ReadLine(); // Notify user about matching status if (CheckCaptcha(captcha usr_captcha)) Console.WriteLine('CAPTCHA Matched'); else Console.WriteLine('CAPTCHA Not Matched'); } }
JavaScript // JavaScript program to automatically generate CAPTCHA and // verify user // Returns true if given two strings are same function checkCaptcha(captcha user_captcha) { return captcha.localeCompare(user_captcha) == 0; } // Generates a CAPTCHA of given length function generateCaptcha(n) { // Characters to be included const chrs = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; let captcha = ''; for (let i = 0; i < n; i++) { captcha += chrs[(Math.floor(Math.random() * chrs.length))]; } return captcha; } // Driver code function main() { // Generate a random CAPTCHA const captcha = generateCaptcha(9); console.log(captcha); // Ask user to enter a CAPTCHA const usr_captcha = prompt('Enter above CAPTCHA:'); // Notify user about matching status if (checkCaptcha(captcha usr_captcha)) console.log('CAPTCHA Matched'); else console.log('CAPTCHA Not Matched'); } main();
Wyjście:
znak do int Java
CAPTCHA: cF3yl9T4 Enter CAPTCHA: cF3yl9T4 CAPTCHA Matched
Złożoność czasowa: NA)
Złożoność przestrzeni: O(1)
Utwórz quiz