About me

About

2011-09-27

Validar o NIF em XPath.

Um proof of concept que fiz há uns anos.

Nota: comando xml

#! /bin/sh
f() {
xml sel -t -c '

/foo[string-length(nif)=9 and
string(
(11 -
(substring(nif,1,1)*9+
substring(nif,2,1)*8+
substring(nif,3,1)*7+
substring(nif,4,1)*6+
substring(nif,5,1)*5+
substring(nif,6,1)*4+
substring(nif,7,1)*3+
substring(nif,8,1)*2) mod 11) * number(
(11 -
(substring(nif,1,1)*9+
substring(nif,2,1)*8+
substring(nif,3,1)*7+
substring(nif,4,1)*6+
substring(nif,5,1)*5+
substring(nif,6,1)*4+
substring(nif,7,1)*3+
substring(nif,8,1)*2) mod 11) < 10))
= substring(nif,9,1)]/nif/text()'
}

g() {
read line
echo "$line" | xml sel -t -c '//nif' | tr -d \\n
answer="$(echo "$line" | f)"
if test "$answer" = ""; then
echo " - BAD";
else
echo " - OK";
fi
}

printf '<foo><nif>123456780</nif></foo>\n' | g
printf '<foo><nif>123456781</nif></foo>\n' | g
printf '<foo><nif>123456782</nif></foo>\n' | g
printf '<foo><nif>123456783</nif></foo>\n' | g
printf '<foo><nif>123456784</nif></foo>\n' | g
printf '<foo><nif>123456785</nif></foo>\n' | g
printf '<foo><nif>123456785</nif></foo>\n' | g
printf '<foo><nif>123456786</nif></foo>\n' | g
printf '<foo><nif>123456787</nif></foo>\n' | g
printf '<foo><nif>123456788</nif></foo>\n' | g
printf '<foo><nif>123456789</nif></foo>\n' | g

Resultado:

<nif>123456780</nif> - BAD
<nif>123456781</nif> - BAD
<nif>123456782</nif> - BAD
<nif>123456783</nif> - BAD
<nif>123456784</nif> - BAD
<nif>123456785</nif> - BAD
<nif>123456785</nif> - BAD
<nif>123456786</nif> - BAD
<nif>123456787</nif> - BAD
<nif>123456788</nif> - BAD
<nif>123456789</nif> - OK

Sem comentários:

Enviar um comentário