IDENTIFICATION DIVISION.
******************
* Identification *
******************
PROGRAM-ID. COBOLEMAIL.
Validar correo electrónico en COBOL.
A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:
Se está desarrollando una aplicación en COBOL.
Debe validarse que el correo electrónico se encuentra asociado a un solo usuario a pesar del componente entre el + y la @[1].
Se define la división IDENTIFICATION DIVISION[2] para la solución:
IDENTIFICATION DIVISION.
******************
* Identification *
******************
PROGRAM-ID. COBOLEMAIL.
En la división DATA DIVISION[3] se definen las variables que serán usadas por el programa:
W01-EMAIL: contiene el email ingresado por entrada estándar.
W02-VALIDEMAIL: al final del proceso contendrá el correo electrónico final que se debe usar en producción (Correo sin el componente entre + y @).
W03-COUNT: variable temporal usada para contar diferentes caracteres.
W04-EMAIL: variable temporal para almacenar el nombre de usuario y el dominio del correo electrónico proporcionado.
********
* Data *
********
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W01-EMAIL PIC X(256) VALUE "".
01 W02-VALIDEMAIL PIC X(256) VALUE "".
01 W03-COUNT PIC 9(002) VALUE 0.
01 W04-EMAIL
02 W04-USERNAME PIC X(64).
02 W04-DOMAIN PIC X(255).
Iniciamos nuestro programa dentro de la división PROCEDURE DIVISION[4] aceptando por entrada estándar un correo electrónico:
********
* Main *
********
PROCEDURE DIVISION.
MAIN.
ACCEPT W01-EMAIL.
Contamos todos los arrobas que se encuentran en el correo proporcionado:
INSPECT W01-EMAIL
TALLYING W03-COUNT
FOR ALL "@".
El número de arrobas debe ser mayor a cero:
IF W03-COUNT > 0 THEN
Reinicializamos la variable de contador:
MOVE 0 TO W03-COUNT
Separamos el correo electrónico a través del arroba, en la primera parte debe quedar el nombre de usuario y en la segunda parte el dominio:
UNSTRING W01-EMAIL
DELIMITED BY "@"
INTO W04-USERNAME W04-DOMAIN
Contamos todos los caracteres en el nombre del usuario:
INSPECT W04-USERNAME
TALLYING W03-COUNT
FOR CHARACTERS
BEFORE INITIAL SPACE
Si es mayor a cero, reinicializamos el contador y continuamos con el proceso:
IF W03-COUNT > 0 THEN
MOVE 0 TO W03-COUNT
Se cuenta todos los caracteres en la parte del dominio (sin incluir espacios):
INSPECT W04-DOMAIN
TALLYING W03-COUNT
FOR CHARACTERS
BEFORE INITIAL SPACE
Si contiene un nombre de dominio, procedemos a realizar la última parte del proceso:
IF W03-COUNT > 0 THEN
Enviamos el componente antes del carácter + a la variable W02-VALIDEMAIL:
UNSTRING W04-USERNAME
DELIMITED BY "+"
INTO W02-VALIDEMAIL
Por último unimos el usuario con el nombre del dominio, de esta forma separamos el componente entre el + y el @, evitando que un usuario pueda registrar múltiples cuentas con un único correo válido:
STRING W02-VALIDEMAIL "@" W04-DOMAIN
DELIMITED BY SPACE
INTO W02-VALIDEMAIL
Mostramos el correo electrónico válido:
DISPLAY W02-VALIDEMAIL
Cualquier otra situación puede ser considerada como un error de correo electrónico:
ELSE
PERFORM EMAIL-ERROR
END-IF
ELSE
PERFORM EMAIL-ERROR
END-IF
ELSE
PERFORM EMAIL-ERROR
END-IF.
STOP RUN.
Para el ejemplo ilustrativo, se muestra un mensaje de error. En esta sección debe ser tratado el error:
EMAIL-ERROR.
DISPLAY "Email error".
STOP RUN.
Estas son algunas de las pruebas realizadas con el programa:
Correo electrónico | Correo electrónico válido |
---|---|
admin |
Error |
Error |
|
@domain.com |
Error |
Puedes descargar el código fuente pulsando en el siguiente enlace:
contiene las validaciones de correo electrónico explicadas anteriormente.
Copyright © 2021 Fluid Attacks, We hack your software. All rights reserved.