Hola, yo tengo uno que me dió Bakanzzip hace unos días, pero es en JavaScript, quizás te sirva:
Código:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script>
function quitaFormatoRut(strVal)
{
var strTmp = ''
var i;
if (strVal.charAt(0) =='0') {
for ( i=1; i < strVal.length ; i++ )
if ( strVal.charAt(i) != ' ' && strVal.charAt(i) != '.' && strVal.charAt(i) != '-' && strVal.charAt(i) != ',' )
strTmp = strTmp + strVal.charAt(i);
}
else
for ( i=0; i < strVal.length ; i++ )
if ( strVal.charAt(i) != ' ' && strVal.charAt(i) != '.' && strVal.charAt(i) != '-' && strVal.charAt(i) != ',' )
strTmp = strTmp + strVal.charAt(i);
return strTmp;
}
function validaDV( strDV )
{
dv = strDV + ""
if ( dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4' && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9' && dv != 'k' && dv != 'K')
return false;
return true;
}
function chequeaDV(thisRut)
{
var strRut = quitaFormatoRut(thisRut.value);
var i;
if (thisRut.value =="")
return false;
largo = strRut.length;
if ( largo < 2 )
{
alert("Debe ingresar el rut completo")
thisRut.focus();
thisRut.select();
return false;
}
if ( largo > 2 )
strRutSD = strRut.substring(0, largo - 1);
else
strRutSD = strRut.charAt(0);
strDv = strRut.charAt(largo-1);
if (!validaDV( strDv ))
{
alert("Su digito validador del rut " + thisRut.value + " es incorrecto")
thisRut.focus();
thisRut.select();
return false
}
if ( strRutSD == null || strDv == null )
return 0
var dvr = '0'
intSuma = 0
intFactor = 2
for (i= strRutSD.length -1 ; i >= 0; i--)
{
intSuma = intSuma + strRutSD.charAt(i) * intFactor
if (intFactor == 7)
intFactor = 2
else
intFactor++
}
intResto = intSuma % 11
if (intResto == 1)
dvr = 'k'
else if (intResto == 0)
dvr = '0<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script>
function quitaFormatoRut(strVal)
{
var strTmp = ''
var i;
if (strVal.charAt(0) =='0') {
for ( i=1; i < strVal.length ; i++ )
if ( strVal.charAt(i) != ' ' && strVal.charAt(i) != '.' && strVal.charAt(i) != '-' && strVal.charAt(i) != ',' )
strTmp = strTmp + strVal.charAt(i);
}
else
for ( i=0; i < strVal.length ; i++ )
if ( strVal.charAt(i) != ' ' && strVal.charAt(i) != '.' && strVal.charAt(i) != '-' && strVal.charAt(i) != ',' )
strTmp = strTmp + strVal.charAt(i);
return strTmp;
}
function validaDV( strDV )
{
dv = strDV + ""
if ( dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4' && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9' && dv != 'k' && dv != 'K')
return false;
return true;
}
function chequeaDV(thisRut)
{
var strRut = quitaFormatoRut(thisRut.value);
var i;
if (thisRut.value =="")
return false;
largo = strRut.length;
if ( largo < 2 )
{
alert("Debe ingresar el rut completo")
thisRut.focus();
thisRut.select();
return false;
}
if ( largo > 2 )
strRutSD = strRut.substring(0, largo - 1);
else
strRutSD = strRut.charAt(0);
strDv = strRut.charAt(largo-1);
if (!validaDV( strDv ))
{
alert("Su digito validador del rut " + thisRut.value + " es incorrecto")
thisRut.focus();
thisRut.select();
return false
}
if ( strRutSD == null || strDv == null )
return 0
var dvr = '0'
intSuma = 0
intFactor = 2
for (i= strRutSD.length -1 ; i >= 0; i--)
{
intSuma = intSuma + strRutSD.charAt(i) * intFactor
if (intFactor == 7)
intFactor = 2
else
intFactor++
}
intResto = intSuma % 11
if (intResto == 1)
dvr = 'k'
else if (intResto == 0)
dvr = '0'
else
{
dvi = 11 - intResto
dvr = dvi + ""
}
if ( dvr != dv.toLowerCase() )
{
alert("EL rut " + thisRut.value + " es incorrecto")
thisRut.focus();
thisRut.select();
return false
}
return true
}
function formateaRut(thisRut)
{
var tmpstr = "";
var strRut = thisRut.value
var i
//alert(thisRut.value)
if (thisRut.value == "")
return false;
for ( i=0; i < strRut.length ; i++ )
if ( strRut.charAt(i) != ' ' && strRut.charAt(i) != '.' && strRut.charAt(i) != '-' )
tmpstr = tmpstr + strRut.charAt(i);
strRut = tmpstr;
largo = strRut.length;
if ( largo < 2 )
{
alert("Debe ingresar el rut completo");
thisRut.focus();
thisRut.select();
return false;
}
for (i=0; i < largo ; i++ )
{
if ( strRut.charAt(i) !="0" && strRut.charAt(i) != "1" && strRut.charAt(i) !="2" && strRut.charAt(i) != "3" && strRut.charAt(i) != "4" && strRut.charAt(i) !="5" && strRut.charAt(i) != "6" && strRut.charAt(i) != "7" && strRut.charAt(i) !="8" && strRut.charAt(i) != "9" && strRut.charAt(i) !="k" && strRut.charAt(i) != "K" )
{
alert("El valor ingresado no corresponde a un R.U.T valido");
thisRut.focus();
thisRut.select();
return false;
}
}
var invertido = "";
for ( i=(largo-1),j=0; i>=0; i--,j++ )
invertido = invertido + strRut.charAt(i);
var dtexto = "";
dtexto = dtexto + invertido.charAt(0);
dtexto = dtexto + '-';
cnt = 0;
for ( i=1,j=2; i<largo; i++,j++ )
{
if ( cnt == 3 )
{
dtexto = dtexto + '.';
j++;
dtexto = dtexto + invertido.charAt(i);
cnt = 1;
}
else
{
dtexto = dtexto + invertido.charAt(i);
cnt++;
}
}
invertido = "";
for ( i=(dtexto.length-1),j=0; i>=0; i--,j++ )
invertido = invertido + dtexto.charAt(i);
thisRut.value = invertido;
if ( validaDV(strRut) )
return true;
return false;
}
</script>
<title>Pagina de Pruebas</title>
</head>
<body>
<table border=0 align=right width=180>
<tr>
<td bgcolor=orange><font face=verdana size=1>Rut&nbsp;</font></td>
<td bgcolor=orange><font face=verdana size=1><INPUT type="text" id=text1 name=rut onchange="formateaRut(this); chequeaDV(this);" maxlength=15 size=12></font></td>
</tr>
</table>
</body>
</html>
<img src="http://www.artereal.com/cerrado3.gif"> <font size="1" color="#808080">[I]Un verdadero signo de un buen hombre es si ama a su padre y madre.[/CODE]