[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
>