Me dio por realizar esta función con el objeto de que a alguien le sirva.
Saludos!.
(Obtiene el DV del RUN chileno).
#!/usr/bin/env python
# -*- coding: utf8 -*-
"""
Script para obtener el digito verificador del RUN
e imprime todo el RUN
@author: felcontreras@gmail.com
"""
import os
import sys
def number_format(num):
"""
Funcion la cual realiza el formateo del numero
dejandolo asi separado por puntos.
(USO SIMPLE)
"""
numero = str(num)
i = 0
numfinal = ""
numdex = ""
for concat in reversed(numero):
numfinal += concat
if i == 2:
numfinal += "."
i = 0
else:
i += 1
for numreal in reversed(numfinal):
numdex += numreal
if numdex[0] == ".":
retorno = numdex[1:len(numdex)]
else:
retorno = numdex
return retorno
def obtienedv(run):
"""
Funcion la cual retorna el digito verificador
a su vez el run ya formateado.
Eso ya me voy a dormir.
"""
permitido = "1234567890"
total = 0
multiplo = 2
rutx = ""
for cambio in run:
if cambio in permitido:
rutx += cambio
for reverso in reversed(rutx):
total += int(reverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
retorno = rutx+str(div)
return retorno
def abreArchivo(archivo):
"""
Funcion la cual lee el archivo de origen para la opcion -i
"""
abre = open(archivo, 'r')
arreglo = []
for linea in abre.readlines():
arreglo.append(obtienedv(linea))
abre.close()
return "\n".join(arreglo)
def creaArchivo(archivo, info):
"""
Funcion la cual crea el archivo de destino y almacena la información del archivo de entrada
"""
try:
cnuevo = open(archivo, 'w')
except:
print "Imposible escribir en archivo"
sys.exit()
cnuevo.write(info)
cnuevo.close()
return True
if '__main__' == __name__:
if "--help" in sys.argv:
print "Modo de uso:"
print sys.argv[0]+ " 123456789 # (run)"
print sys.argv[0]+ " -i archivo_entrada # Imprime en Pantalla | -o archivo_de_salida (opcional)"
sys.exit()
if len(sys.argv) > 2:
if "-i" in sys.argv:
try:
archivo = sys.argv[sys.argv.index("-i")+1]
except IndexError:
print "Debes definir el archivo a leer"
sys.exit()
runs = abreArchivo(os.getcwd()+"/"+archivo)
if "-o" in sys.argv:
try:
anuevo = sys.argv[sys.argv.index("-o")+1]
creaArchivo(anuevo, runs)
except:
print "Imposible crear el archivo de salida."
sys.exit()
else:
print runs
elif len(sys.argv) == 2:
print obtienedv(sys.argv[1])
else:
print sys.argv[0]+" --help. Para obtener mayor infromacion."
miércoles, 5 de septiembre de 2012
martes, 4 de septiembre de 2012
Validador de Run Chileno en Python
#!/usr/bin/env python
#-*- coding: utf8 -*-
"""
Script para la validación de RUN Chileno.
@author: felcontreras@gmail.com
"""
import sys
def filtra(rut):
"""
Esta funcion cumple el trabajo de filtrar el RUN.
Omitiendo asi los puntos (.) y Guiones (-) y cualquier otro caracter
que no incluya la variable 'caracteres'.
"""
caracteres = "1234567890k"
rutx = ""
for cambio in rut.lower():
if cambio in caracteres:
rutx += cambio
return rutx
def valida(rut):
"""
Esta funcion cumple el trabajo de realizar la logica de negocio,
ya sea matematica como logica.
"""
rfiltro = filtra(rut)
rutx = str(rfiltro[0:len(rfiltro)-1])
digito = str(rfiltro[-1])
multiplo = 2
total = 0
for reverso in reversed(rutx):
total += int(reverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
if str(div) == str(digito):
retorno = "Valido"
else:
retorno = "Invalido"
return retorno
if __name__ == "__main__":
if len(sys.argv) == 2:
print valida(sys.argv[1])
else:
print "* Atención - Utilizando RUN: 11.111.111-1 en modo prueba.*"
print "# Modo de empleo: 'python "+sys.argv[0]+" 22.222.222-2'. (RUN A VALIDAR) #"
print valida("11.111.111-1")
#-*- coding: utf8 -*-
"""
Script para la validación de RUN Chileno.
@author: felcontreras@gmail.com
"""
import sys
def filtra(rut):
"""
Esta funcion cumple el trabajo de filtrar el RUN.
Omitiendo asi los puntos (.) y Guiones (-) y cualquier otro caracter
que no incluya la variable 'caracteres'.
"""
caracteres = "1234567890k"
rutx = ""
for cambio in rut.lower():
if cambio in caracteres:
rutx += cambio
return rutx
def valida(rut):
"""
Esta funcion cumple el trabajo de realizar la logica de negocio,
ya sea matematica como logica.
"""
rfiltro = filtra(rut)
rutx = str(rfiltro[0:len(rfiltro)-1])
digito = str(rfiltro[-1])
multiplo = 2
total = 0
for reverso in reversed(rutx):
total += int(reverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
if str(div) == str(digito):
retorno = "Valido"
else:
retorno = "Invalido"
return retorno
if __name__ == "__main__":
if len(sys.argv) == 2:
print valida(sys.argv[1])
else:
print "* Atención - Utilizando RUN: 11.111.111-1 en modo prueba.*"
print "# Modo de empleo: 'python "+sys.argv[0]+" 22.222.222-2'. (RUN A VALIDAR) #"
print valida("11.111.111-1")
Generador de Runs y DV Chilenos en Python
#!/usr/bin/env python
"""
Genera RUN V1.0
Este script genera RUN Chilenos validados
Utiles para registrarse en algun sitio que requiera dichos datos
y no colocar los propios.
uso: Generarut.py 10000000 10000050
Por defecto generara 500 runs entre: 10.000.000 y 10.000.500
Esto generara 50 Runs validos
"""
import sys
def generarut(desde, hasta):
"""
Funcion que permite la generacion de runs.
"""
arreglo = []
multiplo = 2
total = 0
for i in range(desde, hasta):
rut = str(i)
for rinverso in reversed(rut):
total += int(rinverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
arreglo.append(rut + "-" + str(div))
return arreglo
if "__main__" == __name__:
if len(sys.argv) == 3:
DESDE = int(sys.argv[1])
HASTA = int(sys.argv[2])
else:
DESDE = 10000000
HASTA = 10000500
for runs in generarut(DESDE, HASTA):
print runs
"""
Genera RUN V1.0
Este script genera RUN Chilenos validados
Utiles para registrarse en algun sitio que requiera dichos datos
y no colocar los propios.
uso: Generarut.py 10000000 10000050
Por defecto generara 500 runs entre: 10.000.000 y 10.000.500
Esto generara 50 Runs validos
"""
import sys
def generarut(desde, hasta):
"""
Funcion que permite la generacion de runs.
"""
arreglo = []
multiplo = 2
total = 0
for i in range(desde, hasta):
rut = str(i)
for rinverso in reversed(rut):
total += int(rinverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
arreglo.append(rut + "-" + str(div))
return arreglo
if "__main__" == __name__:
if len(sys.argv) == 3:
DESDE = int(sys.argv[1])
HASTA = int(sys.argv[2])
else:
DESDE = 10000000
HASTA = 10000500
for runs in generarut(DESDE, HASTA):
print runs
martes, 8 de febrero de 2011
Clase de conexión php-mysql
Bueno, como estaba aburrido y las clases de conexion con mysql y php no son muy completas o bien no se adaptan a mis necesidades, me dio por hacer esta que espero que a alguien le sirva de ayuda.
El codigo acontinuación.
<?php
class conSQL
{
private $usuarioDB='';
private $claveDB='';
private $hostDB='';
private $baseDB='';
public $consulta;
public $numfield;
public $affected;
public $numrows;
public $sql;
public $insertid;
private $conexion;
public function __construct($sql)
{
$this->sql = $sql;
}
private function conecta()
{
$this->conexion = @mysql_connect($this->hostDB,$this->usuarioDB,$this->claveDB) or die ("Base de datos en mantención.");
@mysql_select_db($this->baseDB);
return $this->conexion;
}
public function desconecta()
{
return mysql_close($this->conecta());
}
public function executeQuery()
{
$this->conecta();
$this->consulta = mysql_query($this->sql);
$this->numfield = mysql_num_fields($this->consulta);
$this->numrows = mysql_num_rows($this->consulta);
$this->desconecta();
$i=0;
$arreglo = array();
if ($rs = mysql_fetch_array($this->consulta)) {
do {
for ($j=0;$j<$this->numfield;$j++) {
$nombrecampo = mysql_field_name($this->consulta,$j);
$arreglo[$i][$nombrecampo] = $rs[$nombrecampo];
if ($j == $this->numfield) { $j = 0;}
}
$i++;
} while ($rs = mysql_fetch_array($this->consulta));
}
mysql_free_result($this->consulta);
return $arreglo;
}
public function executeUpdate()
{
$this->conecta();
$this->consulta = @mysql_query($this->sql);
$this->insertid = mysql_insert_id();
$this->affected = mysql_affected_rows();
$this->desconecta();
return $this->consulta;
}
}
?>
Modo de empleo:
Para este ejemplo simularemos una consulta tipo "SELECT" para que retorne algo, luego se mostrara una para el modo INSERT o UPDATE, que generalmente no retornan nada, excepto la cantidad de filas insertadas y/o actualizadas ah! y el ultimo insert realizado.
Ejemplo de SELECT.
require_once("/path/to/file/of/class/to/conexion.php");
$consulta="SELECT nombre,apellido FROM usuario";
$db = new conSQL($consulta);
$retorno = $db->executeQuery();
if ( $db->numrows > 0 )
{
foreach ( $retorno as $row )
{
echo $row['nombre']." ";
echo $row['apellido']."<br />";
}
}
?>
Ejemplo de UPDATE.
<?php
require_once("/path/to/file/of/class/to/conexion.php");
$consulta="UPDATE tbl1 SET apellido='macabeillo' WHERE nombre='juan'";
$db = new conSQL($consulta);
$db->executeUpdate();
if ( $db->affected > 0 ) // o tambien podria ser "if ( $db->affected )"
{
echo "El usuario ha sido actualizado";
}
?>
Ejemplo de INSERT.
<?php
require_once("/path/to/file/of/class/to/conexion.php");
$consulta="UPDATE tbl1 SET apellido='macabeillo' WHERE nombre='juan'";
$db = new conSQL($consulta);
$db->executeUpdate();
if ( $db->insertid > 0) // Al igual que UPDATE esto se puede hacer "if ( $db->insertid )
{
echo "El ultimo ingreso en la base de datos es: ".$db->insertid;
}
?>
El codigo acontinuación.
<?php
class conSQL
{
private $usuarioDB='';
private $claveDB='';
private $hostDB='';
private $baseDB='';
public $consulta;
public $numfield;
public $affected;
public $numrows;
public $sql;
public $insertid;
private $conexion;
public function __construct($sql)
{
$this->sql = $sql;
}
private function conecta()
{
$this->conexion = @mysql_connect($this->hostDB,$this->usuarioDB,$this->claveDB) or die ("Base de datos en mantención.");
@mysql_select_db($this->baseDB);
return $this->conexion;
}
public function desconecta()
{
return mysql_close($this->conecta());
}
public function executeQuery()
{
$this->conecta();
$this->consulta = mysql_query($this->sql);
$this->numfield = mysql_num_fields($this->consulta);
$this->numrows = mysql_num_rows($this->consulta);
$this->desconecta();
$i=0;
$arreglo = array();
if ($rs = mysql_fetch_array($this->consulta)) {
do {
for ($j=0;$j<$this->numfield;$j++) {
$nombrecampo = mysql_field_name($this->consulta,$j);
$arreglo[$i][$nombrecampo] = $rs[$nombrecampo];
if ($j == $this->numfield) { $j = 0;}
}
$i++;
} while ($rs = mysql_fetch_array($this->consulta));
}
mysql_free_result($this->consulta);
return $arreglo;
}
public function executeUpdate()
{
$this->conecta();
$this->consulta = @mysql_query($this->sql);
$this->insertid = mysql_insert_id();
$this->affected = mysql_affected_rows();
$this->desconecta();
return $this->consulta;
}
}
?>
Modo de empleo:
Para este ejemplo simularemos una consulta tipo "SELECT" para que retorne algo, luego se mostrara una para el modo INSERT o UPDATE, que generalmente no retornan nada, excepto la cantidad de filas insertadas y/o actualizadas ah! y el ultimo insert realizado.
Ejemplo de SELECT.
require_once("/path/to/file/of/class/to/conexion.php");
$consulta="SELECT nombre,apellido FROM usuario";
$db = new conSQL($consulta);
$retorno = $db->executeQuery();
if ( $db->numrows > 0 )
{
foreach ( $retorno as $row )
{
echo $row['nombre']." ";
echo $row['apellido']."<br />";
}
}
?>
Ejemplo de UPDATE.
<?php
require_once("/path/to/file/of/class/to/conexion.php");
$consulta="UPDATE tbl1 SET apellido='macabeillo' WHERE nombre='juan'";
$db = new conSQL($consulta);
$db->executeUpdate();
if ( $db->affected > 0 ) // o tambien podria ser "if ( $db->affected )"
{
echo "El usuario ha sido actualizado";
}
?>
Ejemplo de INSERT.
<?php
require_once("/path/to/file/of/class/to/conexion.php");
$consulta="UPDATE tbl1 SET apellido='macabeillo' WHERE nombre='juan'";
$db = new conSQL($consulta);
$db->executeUpdate();
if ( $db->insertid > 0) // Al igual que UPDATE esto se puede hacer "if ( $db->insertid )
{
echo "El ultimo ingreso en la base de datos es: ".$db->insertid;
}
?>
martes, 5 de enero de 2010
Python y conexion a base de datos postgreSQL
Buscando información referente a las conexiones y querys de postgreSQL, me percate que no hay mayor detalle, como por ejemplo, recorrer una query a través de un SELECT...
Para este ejemplo se utilizara la API "psycopg2"
Bueno, rebuscandome una forma, encontre algo que quizas no sea muy elegante, pero el punto es que funciona...
A continuación les mostrare como.
# la variable argumentos contendria algo como esto:
# argumentos="host=localhost dbname=base_de_datos user=tu_usuario password=tu_clave port=5432"
class conexionSQL:
def __init__(self,argumentos=connectionString):
self.argumentos = argumentos
def select(self,query):
argumentos = self.argumentos
con = psycopg2.connect(argumentos)
cur = con.cursor()
cur.execute(query)
rows = cur.fetchall()
for row in range(len(rows)):
for campos in range(len(rows[row])):
print rows[row][campos]
cur.close()
con.close()
Creo que no hay mucho que agregar, pero el resultado seria:
campo1 campo2 campo3 campo4...
campo1 campo2 campo3 campo4...
campo1 campo2 campo3 campo4...
Saludos.
Para este ejemplo se utilizara la API "psycopg2"
Bueno, rebuscandome una forma, encontre algo que quizas no sea muy elegante, pero el punto es que funciona...
A continuación les mostrare como.
# la variable argumentos contendria algo como esto:
# argumentos="host=localhost dbname=base_de_datos user=tu_usuario password=tu_clave port=5432"
class conexionSQL:
def __init__(self,argumentos=connectionString):
self.argumentos = argumentos
def select(self,query):
argumentos = self.argumentos
con = psycopg2.connect(argumentos)
cur = con.cursor()
cur.execute(query)
rows = cur.fetchall()
for row in range(len(rows)):
for campos in range(len(rows[row])):
print rows[row][campos]
cur.close()
con.close()
Creo que no hay mucho que agregar, pero el resultado seria:
campo1 campo2 campo3 campo4...
campo1 campo2 campo3 campo4...
campo1 campo2 campo3 campo4...
Saludos.
lunes, 20 de julio de 2009
*FIX* mod_rewrite: could not init rewrite log lock in child
Error al momento de enjaular apache y su respectiva solución.
Error
Error
[crit] (2)No such file or directory: mod_rewrite: could not init rewrite log lock in child
Agregar esto
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]</IfModule>
O esto:
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 0</IfModule>
Saludos.
jueves, 16 de julio de 2009
Pasar de extención nrg a iso en linux, cuando nrg2iso no funciona.
El otro dia me tope con la desagradable sorpresa al momento de intentar pasar una imagen nrg a iso con nrg2iso, lo cual desafortunadamente no funciono...
Buscando dentro de los repositorios de debian y/o ubuntu, encontre una aplicación llamada "iat" la cual cumple la misma función.
yo@mi-maquina:~$ apt-cache search iat && su root -c "apt-get install iat"
Password:
Y listo...
La forma de utilizar el programa, es a prueba de $%&/()!·$...
o sea...
yo@mi-maquina:~$ iat imagen.nrg nueva_imagen.iso
Saludos.
Buscando dentro de los repositorios de debian y/o ubuntu, encontre una aplicación llamada "iat" la cual cumple la misma función.
yo@mi-maquina:~$ apt-cache search iat && su root -c "apt-get install iat"
Password:
Y listo...
La forma de utilizar el programa, es a prueba de $%&/()!·$...
o sea...
yo@mi-maquina:~$ iat imagen.nrg nueva_imagen.iso
Saludos.
Suscribirse a:
Entradas (Atom)
