[Python] Verificar N.A.S.S. y obtener provincia [España]

Iniciado por khyv123, Julio 23, 2011, 01:46:24 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 23, 2011, 01:46:24 PM Ultima modificación: Julio 24, 2011, 11:09:20 AM por khyv123
Código: php
 Sintaxis: SegSoc.py <codigo>

- <codigo> debe ser un numero de seguridad social de 10 (sin digitos de control) o 12 caracteres.
- En caso de omitir los numeros de control se calcularan automaticamente.

Ejemplos:
        SegSoc.py 281265347455
        SegSoc.py 281265347455
        SegSoc.py 458254827873


Ejemplo de uso:
Código: php
D:\>SegSoc.py 3503265487

El numero de seguridad social 350326548723 es valido (Provincia : Las Palmas).

D:\>SegSoc.py 281265347455

El numero de seguridad social 281265347455 es valido (Provincia : Madrid).

D:\>SegSoc.py 458254827873

El numero de seguridad social 458254827873 es valido (Provincia : Toledo).




Código: python

# ******************************************
#     Autor : khyv123 
#     Fecha de creacion : 23/07/11
#     Creado para : www.underc0de.org
# ******************************************

import sys

def sintaxis():
print '\n Sintaxis: SegSoc.py <codigo>'
print '\n- <codigo> debe ser un numero de seguridad social de 10 (sin digitos de control) o 12 caracteres.'
print '- En caso de omitir los numeros de control se calcularan automaticamente.'
print '\n Ejemplos:'
print '\tSegSoc.py 3503265487'
print '\tSegSoc.py 281265347455'
print '\tSegSoc.py 458254827873'

def comp(num):
return filter(lambda x:ord(x)<48 or ord(x)>57,num)=='' and (len(num)==12 or len(num)==10)

if len(sys.argv)==2 and comp(sys.argv[1])==True:
dic={1:'Alava',2:'Albacete',3:'Alicante',4:'Almeria',5:'Avila',6:'Badajoz',7:'Islas Baleares',8:'Barcelona',9:'Burgos',10:'Caceres',11:'Cadiz',12:'Castellon',13:'Ciudad Real',14:'Cordoba',15:'La Coruna',16:'Cuenca',17:'Girona',18:'Granada',19:'Guadalajara',20:'Guipuzcoa',21:'Huelva',22:'Huesca',23:'Jaen',24:'Leon',25:'Lleida',26:'La Rioja',27:'Lugo',28:'Madrid',29:'Malaga',30:'Murcia',31:'Navarra',32:'Ourense',33:'Asturias',34:'Palencia',35:'Las Palmas',36:'Pontevedra',37:'Salamanca',38:'Santa Cruz de Tenerife',39:'Cantabria',40:'Segovia',41:'Sevilla',42:'Soria',43:'Tarragona',44:'Teruel',45:'Toledo',46:'Valencia',47:'Valladolid',48:'Vizcaya',49:'Zamora',50:'Zaragoza',51:'Ceuta',52:'Melilla'}
num=sys.argv[1]
a=int(num[0:2])
b=int(num[2:10])
prv=dic[a]
cc=((b<10000000) and (b+a*10000000) or int('%d%d'%(a,b)))%97

if len(num)==10:
c=cc
num=num+str(c)
else:
c=int(num[10:12])

if cc==c:
sys.exit('\nEl numero de seguridad social %s es valido (Provincia : %s).'%(num,prv))
else:
sys.exit('\nNumero de suguriad social %s no es valido.'%num)

else:
sintaxis()