sábado, 30 de novembro de 2013

Função que checa o Numero do CPF


Function fn_CheckCPF(Valor: String): Boolean ;
Var
   localCPF: String ;
   localResult: boolean ;
   digit1, digit2: integer ;
   ii, soma: integer ;
Begin
   localCPF := '' ;
   localResult := False ;

   {analisa CPF no formato 999.999.999-00}
   If Length(Valor) = 14 Then
      If (Copy(Valor, 4, 1) + Copy(Valor, 8, 1) + Copy(Valor, 12, 1) = '..-') Then
      Begin
         localCPF := Copy(Valor, 1, 3) + Copy(Valor, 5, 3) + Copy(Valor, 9, 3) +
            Copy(Valor, 13, 2) ;
         localResult := True ;
      End ;

   {analisa CPF no formato 99999999900}
   If Length(Valor) = 11 Then
   Begin
      localCPF := Valor ;
      localResult := True ;
   End ;

   {comeca a verificacao do digito}
   If localResult Then
   Try
      {1° digito}
      soma := 0 ;
      For ii := 1 To 9 Do Inc(soma, StrToInt(Copy(localCPF, 10 - ii, 1)) * (ii + 1)) ;
      digit1 := 11 - (soma Mod 11) ;
      If digit1 > 9 Then digit1 := 0 ;

      {2° digito}
      soma := 0 ;
      For ii := 1 To 10 Do Inc(soma, StrToInt(Copy(localCPF, 11 - ii, 1)) * (ii + 1)) ;
      digit2 := 11 - (soma Mod 11) ;
      If digit2 > 9 Then digit2 := 0 ;

      {Checa os dois dígitos}
      If (Digit1 = StrToInt(Copy(localCPF, 10, 1))) And
         (Digit2 = StrToInt(Copy(localCPF, 11, 1))) Then
         localResult := True
      Else
         localResult := False ;
   Except
      localResult := False ;
   End ;

   Result := localResult ;
End ;

Nenhum comentário:

Postar um comentário