This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| blog:captcha_amb_cobol [2020/11/19 21:48] – falken | blog:captcha_amb_cobol [2020/11/20 11:37] (current) – falken | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== CAPTCHA amb COBOL ====== | ====== CAPTCHA amb COBOL ====== | ||
| - | Degut a la [[https://www.youtube.com/watch? | + | Degut a la [[https://media.giphy.com/media/ |
| {{: | {{: | ||
| Line 13: | Line 13: | ||
| * Una shell de Unix (Bash, Korn...). | * Una shell de Unix (Bash, Korn...). | ||
| * El compilador de Cobol gnucobol (pot ser qualsevol altre que admeti CALL). | * El compilador de Cobol gnucobol (pot ser qualsevol altre que admeti CALL). | ||
| + | * L' | ||
| * El programa //figlet//. | * El programa //figlet//. | ||
| + | * Un editor de text (vi, < | ||
| * Poca feina. | * Poca feina. | ||
| - | Pas 1: preparar | + | Per anar al gra, el que cal afegir al nostre programa, per a que implementi el Captcha, és el següent: |
| + | |||
| + | Dins la CONFIGURATION SECTION, afegirem aquest descriptor de fitxers: | ||
| + | |||
| + | |||
| + | FILE-CONTROL. | ||
| + | SELECT captchafile ASSIGN TO captchafilename | ||
| + | | ||
| + | |||
| + | |||
| + | I dins la FILE SECTION afegirem la definició del descriptor: | ||
| + | |||
| + | |||
| + | FD captchafile. | ||
| + | 01 FILEGLOBAL. | ||
| + | 02 FILELINE | ||
| + | 88 EOFcaptchafile | ||
| + | |||
| + | |||
| + | |||
| + | En la WORKING-STORAGE SECTION afegirem les variables que utilitzem per al Captcha: | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | 01 ARGV PIC X(100) VALUE SPACES. | ||
| + | 88 RECV VALUE SPACES. | ||
| + | |||
| + | Ja en la PROCEDURE DIVISION, en la SECTION en la que treballem, afegim: | ||
| + | |||
| + | | ||
| + | |||
| + | ☝ Aquesta sentència pren un nombre al·leatori de la variable d' | ||
| + | |||
| + | IF random-number = SPACE OR random-number = LOW-VALUE THEN | ||
| + | DISPLAY " | ||
| + | CALL " | ||
| + | STOP RUN | ||
| + | | ||
| + | |||
| + | ☝ Aquest bloc controla que s'hagi rebut un nombre des de la variable d' | ||
| + | |||
| + | |||
| + | CALL " | ||
| + | FUNCTION CONCATENATE(BANNERCMD " " random-number " > / | ||
| + | | ||
| + | |||
| + | MOVE FUNCTION CONCATENATE("/ | ||
| + | |||
| + | OPEN INPUT captchafile | ||
| + | READ captchafile | ||
| + | AT END SET EOFcaptchafile TO TRUE | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | READ captchafile | ||
| + | AT END SET EOFcaptchafile TO TRUE | ||
| + | | ||
| + | | ||
| + | CLOSE captchafile | ||
| + | CALL " | ||
| + | |||
| + | I el bloc anterior el que fa és mitjançant un CALL executar el programa figlet i enviar la sortida a un fitxer de text temporal. Seguidament es llegeix (READ) el fitxer i s' | ||
| + | Finalment s' | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | ☝ Aquí demanem a l' | ||
| + | |||
| + | IF CAPTCHA IS NOT EQUAL TO random-number THEN | ||
| + | DISPLAY "NOT CORRECT. DISCONNECTING." | ||
| + | CALL " | ||
| + | STOP RUN | ||
| + | | ||
| + | DISPLAY " | ||
| + | CALL " | ||
| + | | ||
| + | |||
| + | ☝ I en el bloc de dalt controlem si l' | ||
| + | |||
| + | Aquest procediment és molt millorable. Per exemple, hauriem de poder realitzar programàticament, | ||
| + | |||
| + | - Obtenir el número al·leatori sense recórrer a la variable d' | ||
| + | - Representar-lo amb ascii-art sense fer servir el programa // | ||
| + | |||
| + | Qui s' | ||
| + | |||
| + | Notes: | ||
| + | |||
| + | Fem servir una variable d' | ||