shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Validação CPF/CNPJ em shell-script


From: Silvano Bolfoni Dias
Subject: Re: [shell-script] Re: Validação CPF/CNPJ em shell-script
Date: Mon, 4 Aug 2003 12:39:25 -0300

Ola Valtoir!

Eu faria uma implementacao soh com bash, sem comando externos. A execucao eh
mais rapida.
Minha sugestao eh a seguinte:
(Esta verificacao ainda deixa passar CPF's com todos os digitos iguais!)

#!/bin/bash
for digpos in 10 11
do
   dig=0
   pos=0
   for fator in `seq $digpos 2`
   do
      dig=$((dig + ${1:$pos:1} * fator))
      pos=$((pos + 1))
   done
   dig=$((11 - dig % 11))
   [ $dig -ge 10 ] && dig=0
   [ $dig -ne ${1:$pos:1} ] && { echo "CPF invalido"; exit; }
done
echo "CPF valido"

-------
[]'s
Silvano


----- Original Message ----- 
From: "Valtoir" <address@hidden>
To: <address@hidden>
Sent: Monday, August 04, 2003 10:58 AM
Subject: Re: [shell-script] Re: Validação CPF/CNPJ em shell-script


> Consegui melhorar um pouco o código. Troquei o nome da variáveil "x"
(agora
> "fator") prá tornar mais o código mais inteligível, eliminei a variável
"y"
> (menos cálculo) e de quebra emagreci o script em uma linha. Ficou bem mais
> simples dessa maneira:
>
> --------------- 8< corte aqui 8< --------------
> #!/bin/bash
> ## shell script em bash2 para validação de CIC
> ### escrito por Valtoir S. Jardim e << melhore o código, coloque seu nome
> aqui e me envie uma cópia>>  ;-)
> #### address@hidden
> ##### feito em 2003-08-01, atualizado em 2003-08-04
> for digpos in 10 11; do
>    matriz=(`seq $digpos 2`)
>    dig=0
>    pos=1
>    for fator in ${matriz[*]}; do
>       let dig=$dig+`echo $1 | cut -c$pos`*$fator
>       let pos=$pos+1
>    done
>    dig=`echo 11-$dig%11 | bc`
>    if [ $dig -ge 10 ]; then
>       dig=0
>    fi
>    if [ $dig -ne `echo $1 | cut -c$digpos` ]; then
>       echo -e "\nCIC inválido\n"
>       exit
>    fi
> done
> echo -e "\nCIC válido\n"
> --------------- >8 --corte aqui -- >8--------------
>
> Essas alterações também vão facilitar a adaptação do código para a
checagem
> de cnpj. Depois do rango vou dar um jeito nisso.
>
> Alguém sabe se dá para melhorar a linha "let pos=$pos+1"?
>
> T+
>
> Valtoir
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]