logo

Programa, skirta generuoti CAPTCHA ir patikrinti vartotoją

A CAPTCHA (Visiškai automatizuotas viešasis Turingo testas, skirtas atskirti kompiuterius ir žmones) yra testas, skirtas nustatyti, ar vartotojas yra žmogus, ar ne.
Taigi užduotis yra kiekvieną kartą sugeneruoti unikalią CAPTCHA ir pasakyti, ar vartotojas yra žmogus, ar ne, paprašant vartotojo įvesti tą pačią CAPTCHA, kuri sugeneruota automatiškai, ir tikrinant vartotojo įvestį sugeneruota CAPTCHA.
Pavyzdžiai: 

latekso teksto dydžiai
CAPTCHA: x9Pm72se Input: x9Pm62es Output: CAPTCHA Not Matched CAPTCHA: cF3yl9T4 Input: cF3yl9T4 Output: CAPTCHA Matched

Simbolių rinkinys, skirtas CAPTCHA generuoti, yra saugomas simbolių masyve chrs[], kuriame yra (a-z A-Z 0-9), todėl chrs[] dydis yra 62. 
Norint sugeneruoti unikalų CAPTCHA kiekvieną kartą, kai sugeneruojamas atsitiktinis skaičius naudojant rand() funkciją (rand()%62), kuri generuoja atsitiktinį skaičių nuo 0 iki 61, o sugeneruotas atsitiktinis skaičius laikomas simbolių masyvo indeksu chrs[], tokiu būdu generuojamas naujas captcha[] simbolis, o ši kilpa paleidžiama n (CAPTCHA ilgis) kartų tam tikro ilgio CAPTCHA generavimui.

Algoritmas:



  1. Pirmiausia deklaruokite ir apibrėžkite funkciją checkCaptcha(), kuri paima du eilutės parametrus ir grąžina loginę reikšmę.
  2. Funkcijoje checkCaptcha() palyginkite du eilutės parametrus naudodami palyginimo () funkciją ir grąžinkite true, jei jie yra vienodi; kitu atveju grąžinkite klaidingą.
  3. Deklaruokite ir apibrėžkite generCaptcha() funkciją, kuri paima sveikojo skaičiaus parametrą ir grąžina eilutės reikšmę.
  4. Funkcijoje generateCaptcha() inicijuokite laiko kintamąjį naudodami funkciją time() ir paimkite atsitiktinių skaičių generatorių naudodami funkciją srand().
  5. Paskelbkite simbolių masyvą, kuriame yra visi simboliai, kurie turi būti įtraukti į CAPTCHA, ir priskirkite jį char rodyklės kintamajam.
  6. Sugeneruokite atsitiktinę nurodyto ilgio CAPTCHA eilutę, pakartotinai pridėdami atsitiktinius simbolius iš simbolių masyvo prie eilutės kintamojo naudodami funkciją push_back().
  7. Grąžinkite sugeneruotą CAPTCHA eilutę.
  8. Funkcijoje main() deklaruokite eilutės kintamąjį, pavadintą captcha, ir iškvieskite generCaptcha() funkciją, kurios ilgis yra 9, kad sugeneruotumėte atsitiktinę CAPTCHA eilutę.
  9. Išspausdinkite sugeneruotą CAPTCHA eilutę konsolėje. 
     
CPP
// 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(); 

Išvestis:  

CAPTCHA: cF3yl9T4 Enter CAPTCHA: cF3yl9T4 CAPTCHA Matched

Laiko sudėtingumas: O(n)
Erdvės sudėtingumas: O(1)

Sukurti viktoriną