에이 보안 문자 (Completely Automated Public Turing test to Tell Computers and Humans Apart)은 사용자가 사람인지 아닌지를 판단하는 테스트입니다.
그래서 매번 고유한 CAPTCHA를 생성하고, 자동으로 생성된 CAPTCHA와 동일한 CAPTCHA를 사용자에게 입력하도록 요청하고, 생성된 CAPTCHA로 사용자 입력을 확인하여 사용자가 사람인지 아닌지를 판별하는 것이 과제입니다.
예:
산제이 더트와
CAPTCHA: x9Pm72se Input: x9Pm62es Output: CAPTCHA Not Matched CAPTCHA: cF3yl9T4 Input: cF3yl9T4 Output: CAPTCHA Matched
CAPTCHA를 생성하는 문자 집합은 (a-z A-Z 0-9)를 포함하는 문자 배열 chrs[]에 저장되므로 chrs[]의 크기는 62입니다.
0에서 61 사이의 난수를 생성하는 rand() 함수(rand()%62)를 사용하여 난수를 생성할 때마다 고유한 CAPTCHA를 생성하려면 생성된 난수를 문자 배열 chrs[]에 대한 인덱스로 사용하여 captcha[]라는 새 문자를 생성하고 이 루프는 n(CAPTCHA 길이)번 실행하여 주어진 길이의 CAPTCHA를 생성합니다.
연산:
- 먼저 두 개의 문자열 매개변수를 사용하고 부울 값을 반환하는 checkCaptcha() 함수를 선언하고 정의합니다.
- checkCaptcha() 함수 내에서 Compare() 함수를 사용하여 두 문자열 매개 변수를 비교하고 동일하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
- 정수 매개변수를 사용하고 문자열 값을 반환하는 generateCaptcha() 함수를 선언하고 정의합니다.
- generateCaptcha() 함수 내에서 time() 함수를 사용하여 시간 변수를 초기화하고 srand() 함수를 사용하여 난수 생성기를 시드합니다.
- CAPTCHA에 포함될 모든 문자를 포함하는 문자 배열을 선언하고 이를 char 포인터 변수에 할당합니다.
- 생성된 CAPTCHA 문자열을 반환합니다.
- main() 함수 내에서 captcha라는 문자열 변수를 선언하고 길이가 9인 generateCaptcha() 함수를 호출하여 임의의 CAPTCHA 문자열을 생성합니다.
- 생성된 CAPTCHA 문자열을 콘솔에 인쇄합니다.
// 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();
산출:
CAPTCHA: cF3yl9T4 Enter CAPTCHA: cF3yl9T4 CAPTCHA Matched
시간 복잡도: 에)
공간 복잡도: 오(1)
퀴즈 만들기