jueves, 18 de noviembre de 2010

Verificar CUIT/CUIL usando el Modulus 11 en Python

Basado en una versión de 10 dígitos de Pablo Canello para el CUIT/CUIL de Argentina en Visual Basic (en la Wikipedia), implementé una versión del algoritmo de control de códigos llamado Modulus 11 en Python.

En el caso del CUIL/CUIT de Argentina el código de contro de un dígito es el último, por ejemplo 8 para 20-29582925-8. De cualquier manera este código se usa en mucho otros lados, ya que fue diseñado para bancos por HP.

#!/usr/bin/python
# -*- coding: utf-8 -*-

def VerificarModulus11(Numero, CodigoUnDigito):
'''
Input en la forma:

Numero="23-34568734" y CodigoUnDigito="7"
o
Numero=2334568734 y CodigoUnDigito=7
'''


if str(Numero) != Numero:
Numero = str(Numero)

x = 0
factor = 2
for c in reversed(Numero):

try:
int(c)
except ValueError:
# not numeric
continue
else:
# numeric
x += int(c) * factor
factor += 1
if factor == 8:
factor = 2
#Calcula el dígito de control.
Control = (11 - (x % 11)) % 11
#Verifica si el dígito de control ingresado
# difiere con el calculado.
return Control == int(CodigoUnDigito)


if __name__ == '__main__':

print '4 OK'
print VerificarModulus11( '20-29582925', '8' )
print VerificarModulus11( 3065876301, '2' )
print VerificarModulus11( 2029582925, '8' )
print VerificarModulus11( 3065876301, 2 )
print '4 Not OK'
print VerificarModulus11( '20-29582925', '7' )
print VerificarModulus11( 3065876301, '3' )
print VerificarModulus11( 2029582925, '4' )
print VerificarModulus11( 3065876301, 1 )

lunes, 8 de noviembre de 2010

Se cayó el sistema: tarjetas de débito duplicadas

En esta ocasión les voy a contar una curiosidad bancaria que me ocurrió. Espero que alguien me pueda explicar que pasó o la información les sea de utilidad para evitar futuras complicaciones.
  1. Pierdo las tarjetas de débito en el recital de Rush.
  2. Cancelo las tarjetas de débito llamando al servicio de denuncia de Banelco. Cancelo 3 tarjetas de débito, una de Standard Bank, una de Patagonia y una del Banco Francés.
  3. A los pocos días llega por correo postal una nueva tarjeta de débito del Banco Patagonia junto con una tarjeta de débito nueva del Standard Bank.
  4. Pruebo las tarjetas y nos funcionan, estaban inválidas.
  5. Luego de algunos días más llega por correo postal un código PIN de Banelco, pero no especifica a que tarjeta pertenece o para que sirve. Yo asumia previamente que las tarjetas nueva se activaban con el primer uso (¿no es inseguro eso?). Ahora parece que mandan el PIN por correo postal aunque no terminé de entender para qué.
  6. Pasan más días y llegan más tarjetas de débito por correo postal. Standard Bank me manda ahora otra tarjeta duplicada de la anterior (?) y una tarjeta extra más con una nota que diciendo "la anterior fue invalidada no la use". Es decir me mandaron en total 3 tarjetas de Standard Bank.
  7. Ninguna de las tarjeta de Standard Bank funcionó.
  8. Voy al Banco Standard Bank y pido una blanqueo de tarjeta para poder usar alguna. Confundida la cajera consulta con un compañero y llegan a la conclusión mirando el sistema que la última tarjeta es la válida, la blanquean y felizmente... ¡funciona!
Mis explicaciones posibles son:
  • El operador de denuncias de Banelco se confundió y me pidió 1 tarjeta de Patagonia y 2 de Standard en vez de una de Patagonia, una de Standard y una de Francés. Luego se dió cuenta y canceló las de Standard y pidió otra para mí.
  • Alguién encontró mi tarjeta débito de Standard Bank antes que yo la denuncie y haciendo algún uso o llamado a algún servicio se la cancelaron y automáticamente mandaron nuevas tarjetas. Este hecho se repitió en dos ocasiones.
  • Es un bug del software de Banelco según el cual si cancelas varias tarjetas al mismo tiempo hay errores. Esta explicación no parece muy plausible porque se supone que sus sistemas estan recontra-probados.
La nota de color curiosa del historia es que la última tarjtea de Standard Bank tiene un color azul un poco más claro que las otras. ¿Será una estrategia del banco para distinguir ediciones de las tarjetas o las tarjetas duplicadas que mandaron son falsas y forman parte de algun estafa (esta es la alternativa conspiranoica)?

martes, 2 de noviembre de 2010

Visualizando Retweets con Sonia

Estuve haciendo unas pruebas con Gephi para visualizar grafos dinámicos de Twitter, en este caso retweets. Con Gephi 0.7beta tuve problemas porque no se puede hacer todo automático (hay que mover el cursor temporal a mano) y además no esta muy estable la característica dinámica.

Finalmente probé con SoNIA 1.2.0 y tuve resultados muy buenos. ¡Excelente herramienta!
  • Nodos: usuarios de Twitter
  • Conexiones: dirigidas, retweets o mensajes reenviados en Twitter, desde emisor a seguidor que reenvia el mensaje
  • 1000 ReTweets (usando Twitter API)
  • Desde Sat Jun 05 2010 19h29m33s hasta 21h20m58s
  • Tiempo total 1 hora 50 minutos aprox
  • Visualización: Sonia 1.2.0
  • Ubicación inicial circular, dinámica tipo resorte
  • Fracciones de tiempo, 2 minutos, duración de los RTs 4 minutos
Observamos:
  • La distribución temporal de RTs/rumor no es uniforme
  • Ídem para distribución de tamaño/difusión del rumor
El próximo paso sería hacer una visualizaciÓn para algun tweet que haya tenido mucha difusión, dado que los tweets que recolecté en esta ocasión son diversos se vé que no llegan mucho lejos, es decir, no se difundieron mucho.

VER EN TAMAÑO GRANDE