Contrôlez un numéro de sécu

Voici une fonction RPGLE pour contrôler un numéro de sécurité sociale.


Elle reçoit une variable caractère de 15 de long qui contient le numéro de sécu + sa clé
et renvoie un booléen indiquant si la clé calculée est différente ou égale de la clé passée.


C’est une fonction que vous pouvez inclure dans un programme de service par exemple !

Voici le code à inclure dans votre programme de service :

dcl-proc Check_Numero_Secu export;
    dcl-pi *n ind;
        numSecu char(15) const;
    end-pi;

    select;
      when %SUBST(numSecu : 6 : 2) = '2A';
        numSecu = %SUBST(numSecu : 1 : 5) + '19' + %SUBST(numSecu : 8 : 7);
      when %SUBST(numSecu : 6 : 2) = '2B';
        numSecu = %SUBST(numSecu : 1 : 5) + '18' + %SUBST(numSecu : 8 : 7);
    endsl;

    return (97 - (%DEC(%SUBST(numSecu : 1 : 13) : 13 : 0)
              - %DEC(%DEC(%SUBST(numSecu : 1 : 13) : 13 : 0) / 97 : 13 : 0) * 97)
           = %DEC(%SUBST(numSecu : 14 : 2) : 2 : 0));
end-proc;             

Voici le code à inclure dans source de liage :

EXPORT SYMBOL(« CHECK_NUMERO_SECU »)  

Voici le code a ajouter dans dans votre programme pour pouvoir utiliser votre contrôle :

dcl-PR Check_Numero_Secu ind ;        
 W_Num_Sec char(15);                  
end-pr ;                              

// dans votre code

if Check_Numero_Secu ind(‘16403323470623’) ;

  dsply ‘error’ ;

endif;

Remarque :

Vous pouvez améliorer le code en mettant votre code sous monitor pour éviter les numéros de sécu incomplets