Saltar al contenido

ejemplo de código de número de identificación válido

Posterior a investigar en diversos repositorios y foros de internet finalmente encontramos la resolución que te mostramos ahora.

Ejemplo: validar número de identificación

# NB--> Language: Perl
# NB--> Country of ID: South Africa (RSA)
use Scalar::Util 'looks_like_number';
sub Validate_IdNum($);
sub GetLuhnDigit($);

#----------------------------------------------------------------#
# Validates the id number being parsed and returns a boolean, 
# If the id number is valid, returns 0, otherwise returns 1
#      PARAMETERS
#                <sIdNo> The id number that needs to be validated
#      EXAMPLES
#               <IN:94091850160a0><OUTPUT:[0]["Idnumbercannotcontainnumericvalues"]>
sub Validate_IdNum($)

   my $sSubName = (caller(0))[3]; # This is just a reference to the function/subroutine name
   my $bFaulty = 0;

   my $sIdNo = $_[0];
   
   my $iStrLen = length $sIdNo;
   my $LastChar = substr($sIdNo, - 1);

   if ( looks_like_number($sIdNo) == 0 ) 
      $bFaulty = 1;
   
   else 
      if ( (length $sIdNo) != 13 ) 
         $bFaulty = 1;
      
      elsif ( substr($sIdNo, - 1) != GetLuhnDigit($sIdNo) )
         $bFaulty = 1;
      
   

   if ($sRetMsg eq "") 
      $sRetMsg = "0";
   

   return ($sRetMsg,$bFaulty);


#----------------------------------------------------------------#
# Used to validate rsa id numbers: (finds expected last digit given the first 12)
# See the Luhn algorithm: https://en.wikipedia.org/wiki/Luhn_algorithm
sub GetLuhnDigit($)

   my $sSubName = (caller(0))[3]; # This is just a reference to the function/subroutine name
   my $iLastDigit = -1;
   my $s12Digits = $_[0];
   my $iSumOdd = 0;
   my $iEvenDigits = "";

   for (my $i=0;$i<6;$i++) 
     $iSumOdd = $iSumOdd + substr($s12Digits,2 * $i,1);
   

   for (my $i=0;$i<6;$i++) 
     $iEvenDigits = $iEvenDigits . substr($s12Digits,(2 * $i) + 1,1);
   

   my $iDblEven = 2 * $iEvenDigits;
   my $iSumDblEvens = 0;
   
   for (my $i = 0; $i < length($iDblEven); $i++) 
      $iSumDblEvens = $iSumDblEvens + substr($iDblEven,$i,1);
   

   my $iUnitVal = $iDblEven;
   my $iFinalBase = $iSumOdd + $iSumDblEvens;

   $iLastDigit = 10 - substr($iFinalBase, - 1);

   if ($iLastDigit == 10) 
      $iLastDigit = 0;
   

   return $iLastDigit;

Te mostramos comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *