Fluid Attacks logo
Contact Us
Young hacker smiling
Zero false positives

Expert intelligence + effective automation

Validar Correo Electrónico

Necesidad

Validar correo electrónico en COBOL.

Contexto

A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en COBOL.

  2. Debe validarse que el correo electrónico se encuentra asociado a un solo usuario a pesar del componente entre el + y la @[1].

Solución

  1. Se define la división IDENTIFICATION DIVISION[2] para la solución:

    cobolemail.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLEMAIL.
    
  2. 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.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
            ********
            * 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).
      
  3. Iniciamos nuestro programa dentro de la división PROCEDURE DIVISION[4] aceptando por entrada estándar un correo electrónico:

    1
    2
    3
    4
    5
    6
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
               ACCEPT W01-EMAIL.
    
  4. Contamos todos los arrobas que se encuentran en el correo proporcionado:

    1
    2
    3
           INSPECT W01-EMAIL
           TALLYING W03-COUNT
           FOR ALL "@".
    
  5. El número de arrobas debe ser mayor a cero:

    1
           IF W03-COUNT > 0 THEN
    
  6. Reinicializamos la variable de contador:

    1
           MOVE 0 TO W03-COUNT
    
  7. 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:

    1
    2
    3
           UNSTRING W01-EMAIL
           DELIMITED BY "@"
           INTO W04-USERNAME W04-DOMAIN
    
  8. Contamos todos los caracteres en el nombre del usuario:

    1
    2
    3
    4
           INSPECT W04-USERNAME
           TALLYING W03-COUNT
           FOR CHARACTERS
           BEFORE INITIAL SPACE
    
  9. Si es mayor a cero, reinicializamos el contador y continuamos con el proceso:

    1
    2
           IF W03-COUNT > 0 THEN
               MOVE 0 TO W03-COUNT
    
  10. Se cuenta todos los caracteres en la parte del dominio (sin incluir espacios):

    1
    2
    3
    4
           INSPECT W04-DOMAIN
           TALLYING W03-COUNT
           FOR CHARACTERS
           BEFORE INITIAL SPACE
    
  11. Si contiene un nombre de dominio, procedemos a realizar la última parte del proceso:

    1
           IF W03-COUNT > 0 THEN
    
  12. Enviamos el componente antes del carácter + a la variable W02-VALIDEMAIL:

    1
    2
    3
           UNSTRING W04-USERNAME
           DELIMITED BY "+"
           INTO W02-VALIDEMAIL
    
  13. 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:

    1
    2
    3
           STRING W02-VALIDEMAIL "@" W04-DOMAIN
           DELIMITED BY SPACE
           INTO W02-VALIDEMAIL
    
  14. Mostramos el correo electrónico válido:

    1
           DISPLAY W02-VALIDEMAIL
    
  15. Cualquier otra situación puede ser considerada como un error de correo electrónico:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
                   ELSE
                       PERFORM EMAIL-ERROR
                   END-IF
               ELSE
                   PERFORM EMAIL-ERROR
               END-IF
           ELSE
               PERFORM EMAIL-ERROR
           END-IF.
    
           STOP RUN.
    
  16. Para el ejemplo ilustrativo, se muestra un mensaje de error. En esta sección debe ser tratado el error:

    1
    2
    3
           EMAIL-ERROR.
               DISPLAY "Email error".
               STOP RUN.
    
  17. Estas son algunas de las pruebas realizadas con el programa:

    Table 1. Salida obtenida luego de ejecutar el programa para diferentes datos de entrada.
    Correo electrónico Correo electrónico válido

    admin

    Error

    admin@

    Error

    @domain.com

    Error

    admin@domain.com

    admin@domain.com

    admin+1234@domain.com

    admin@domain.com

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

  1. cobolemail.cbl contiene las validaciones de correo electrónico explicadas anteriormente.


Service status - Terms of Use