Foros del Web » Programando para Internet » PHP »

Digito Verificacion Colombia

Estas en el tema de Digito Verificacion Colombia en el foro de PHP en Foros del Web. Buen dia. Alguien me puede regalar una funcion con la cual se pueda calcular el digito de verificacion de un Nit?. Gracias de antemano....
  #1 (permalink)  
Antiguo 24/08/2011, 08:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Busqueda Digito Verificacion Colombia

Buen dia.


Alguien me puede regalar una funcion con la cual se pueda calcular el digito de verificacion de un Nit?.

Gracias de antemano.
  #2 (permalink)  
Antiguo 24/08/2011, 10:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Digito Verificacion Colombia

No lo probé mucho pero con las pruebas que hice funcionó.

Código PHP:
Ver original
  1. <?php
  2. function calcularDV($nit) {
  3.     if (! is_numeric($nit)) {
  4.         return false;
  5.     }
  6.  
  7.     $arr = array(1 => 3, 4 => 17, 7 => 29, 10 => 43, 13 => 59, 2 => 7, 5 => 19,
  8.     8 => 37, 11 => 47, 14 => 67, 3 => 13, 6 => 23, 9 => 41, 12 => 53, 15 => 71);
  9.     $x = 0;
  10.     $y = 0;
  11.     $z = strlen($nit);
  12.     $dv = '';
  13.    
  14.     for ($i=0; $i<$z; $i++) {
  15.         $y = substr($nit, $i, 1);
  16.         $x += ($y*$arr[$z-$i]);
  17.     }
  18.    
  19.     $y = $x%11;
  20.    
  21.     if ($y > 1) {
  22.         $dv = 11-$y;
  23.         return $dv;
  24.     } else {
  25.         $dv = $y;
  26.         return $dv;
  27.     }
  28.    
  29. }
  30. //Se debe ingresar el NIT sin comas puntos etc...
  31. echo 'El digito de verificación es: ' . calcularDV(800197268);
  32. ?>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 24/08/2011, 14:59
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Digito Verificacion Colombia

Andres lo voy a testear y te cuento como me fue.

Te agradezco un resto por tu colaboracion.
  #4 (permalink)  
Antiguo 25/08/2011, 09:04
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
De acuerdo Respuesta: Digito Verificacion Colombia

Andrés efectivamente esa es la funcion que necesito, le he testeado con una buena cantidad y ha funcionado sin problema alguno.


Te agradezco por tu valiosa colaboracion.
  #5 (permalink)  
Antiguo 25/08/2011, 09:06
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Digito Verificacion Colombia

Aprovecho que esta duda es similar y la posteo aca mismo.

Alguien tiene una funcion que calcule el digito de verificacion bancario?.

Gracias de antemano.
  #6 (permalink)  
Antiguo 25/08/2011, 09:10
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Digito Verificacion Colombia

Échale un ojo a este post, creo que te estás confundiendo con la idea de este foro.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #7 (permalink)  
Antiguo 25/08/2011, 09:36
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Digito Verificacion Colombia

Buen dia vgonga.

Para nada, al igual que el digito de verificacion de un nit, existe un algoritmo que genera un digito de verificacion a una cadena de 17 caracteres y este es el digito de verificacion Bancario.

Si depronto alguien tiene el algoritmo le agradeceria me lo facilitase y asi me ahorro la desarrollada de este ya que no conozco bien su logica. En caso de que nadie lo tenga, lo subire apenas lo termine.

Gracias de antemano.
  #8 (permalink)  
Antiguo 25/08/2011, 09:41
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Digito Verificacion Colombia

Viendo que tienes eso claro, te echo una mano, no era tan difícil, simplemente había que buscarlo en la wikipedia.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #9 (permalink)  
Antiguo 25/08/2011, 09:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Digito Verificacion Colombia

Me alegro que te haya servido, sobre el bancario no tengo ni la mínima idea, nunca me han pedido eso. Investigo y te cuento... Lo que encontró vgonga1986 es un avance, no se si sólo lo necesitas con cuentas colombianas. Si es así ya te tocaría consultar sobre eso.

Código PHP:
Ver original
  1. function valcuenta_bancaria($cuenta1,$cuenta2,$cuenta3,$cuenta4){
  2. if (strlen($cuenta1)!=4) return false;
  3. if (strlen($cuenta2)!=4) return false;
  4. if (strlen($cuenta3)!=2) return false;
  5. if (strlen($cuenta4)!=10) return false;
  6.  
  7. if (mod11_cuenta_bancaria("00".$cuenta1.$cuenta2)!=$cuenta3{0}) return false;
  8. if (mod11_cuenta_bancaria($cuenta4)!=$cuenta3{1}) return false;
  9. return true;
  10. }
  11. //////////////////////////////////////////////////////////////////////////////////////
  12.  
  13. function mod11_cuenta_bancaria($numero){
  14. if (strlen($numero)!=10) return "?";
  15.  
  16. $cifras = Array(1,2,4,8,5,10,9,7,3,6);
  17. $chequeo=0;
  18. for ($i=0; $i < 10; $i++)
  19.     $chequeo += substr($numero,$i,1) * $cifras[$i];
  20.  
  21. $chequeo = 11 - ($chequeo % 11);
  22. if ($chequeo == 11) $chequeo = 0;
  23. if ($chequeo == 10) $chequeo = 1;
  24. return $chequeo;
  25. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 25/08/2011 a las 10:23 Razón: Agregré un código
  #10 (permalink)  
Antiguo 25/08/2011, 10:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Digito Verificacion Colombia

Andres sos muy amable, he encontrado en la empresa que trabajo un algoritmo viejo desarrollado en Fox y lo pase a PHP, no es muy funcional pero por ahora le dejare tal cual. en un par de minutos lo posteare.
  #11 (permalink)  
Antiguo 25/08/2011, 13:31
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Digito Verificacion Colombia

Bueno, bien se que este codigo se puede optimizar con un ciclo y demas, pero por ahora asi esta, si alguien lo necesita modifiquelo de forma que sea mas optimo.

Gracias por la atencion prestada.


function digito_verificacion_bancario($codigo) {

Try {
$suma = 0;
$multi = 0;
$digito = 0;
$sigue = 0;

$n1 = substr($codigo, 0, 1) * 1;
$n2 = substr($codigo, 1, 1) * 2;
$n3 = substr($codigo, 2, 1) * 1;
$n4 = substr($codigo, 3, 1) * 2;
$n5 = substr($codigo, 4, 1) * 1;
$n6 = substr($codigo, 5, 1) * 2;
$n7 = substr($codigo, 6, 1) * 1;
$n8 = substr($codigo, 7, 1) * 2;
$n9 = substr($codigo, 8, 1) * 1;
$n10 = substr($codigo, 9, 1) * 2;
$n11 = substr($codigo, 10, 1) * 1;
$n12 = substr($codigo, 11, 1) * 2;
$n13 = substr($codigo, 12, 1) * 1;
$n14 = substr($codigo, 13, 1) * 2;
$n15 = substr($codigo, 14, 1) * 1;
$n16 = substr($codigo, 15, 1) * 2;
$n17 = substr($codigo, 16, 1) * 1;


$suma = 0;
if ($n1 < 10) {
$suma = $suma + $n1;
} else {
$suma = $suma + 1 + ($n1 - 10);
}


if ($n2 < 10) {
$suma = $suma + $n2;
} else {
$suma = $suma + 1 + ($n2 - 10);
}


if ($n3 < 10) {
$suma = $suma + $n3;
} else {
$suma = $suma + 1 + ($n3 - 10);
}


if ($n4 < 10) {
$suma = $suma + $n4;
} else {
$suma = $suma + 1 + ($n4 - 10);
}


if ($n5 < 10) {
$suma = $suma + $n5;
} else {
$suma = $suma + 1 + ($n5 - 10);
}


if ($n6 < 10) {
$suma = $suma + $n6;
} else {
$suma = $suma + 1 + ($n6 - 10);
}


if ($n7 < 10) {
$suma = $suma + $n7;
} else {
$suma = $suma + 1 + ($n7 - 10);
}


if ($n8 < 10) {
$suma = $suma + $n8;
} else {
$suma = $suma + 1 + ($n8 - 10);
}


if ($n9 < 10) {

$suma = $suma + $n9;
} else {
$suma = $suma + 1 + ($n9 - 10);
}


if ($n10 < 10) {
$suma = $suma + $n10;
} else {
$suma = $suma + 1 + ($n10 - 10);
}


if ($n11 < 10) {
$suma = $suma + $n11;
} else {
$suma = $suma + 1 + ($n11 - 10);
}


if ($n12 < 10) {
$suma = $suma + $n12;
} else {
$suma = $suma + 1 + ($n12 - 10);
}


if ($n13 < 10) {
$suma = $suma + $n13;
} else {
$suma = $suma + 1 + ($n13 - 10);
}


if ($n14 < 10) {
$suma = $suma + $n14;
} else {
$suma = $suma + 1 + ($n14 - 10);
}


if ($n15 < 10) {
$suma = $suma + $n15;
} else {
$suma = $suma + 1 + ($n15 - 10);
}


if ($n16 < 10) {
$suma = $suma + $n16;
} else {
$suma = $suma + 1 + ($n16 - 10);
}


if ($n17 < 10) {
$suma = $suma + $n17;
} else {
$suma = $suma + 1 + ($n17 - 10);
}


$multi = round($suma / 10, 0, PHP_ROUND_HALF_DOWN) * 10;

if ($multi == $suma) {
$digito = 0;
} else {
$digito = round($suma / 10, 0, PHP_ROUND_HALF_DOWN);
$sigue = $digito * 10 + 10;
$digito = $sigue - $suma;
}

if($digito<10){
return $digito;
}else{
$digito=substr($digito, 1, 1);
return $digito;
}

} catch (Exception $exc) {
return "Error: ".$exc->getTraceAsString();
}
}
  #12 (permalink)  
Antiguo 26/08/2011, 01:30
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Digito Verificacion Colombia

Es que no te has leído mi post? Te he dejado un enlace (son esas palabritas que salen sombreadas en gris y con la letra naranja). Si lo sigues verás que es una página de la wikipedia que habla de lo que pides y si te molestas en darle al scroll un par de veces para abajo, verás el código PHP directamente colocado en la web, pero bueno, no vaya a ser que te dé un jamacuco, te lo pego aquí, que lo verás mejor:
Código PHP:
Ver original
  1. function valcuenta_bancaria($cuenta1,$cuenta2,$cuenta3,$cuenta4){
  2. if (strlen($cuenta1)!=4) return false;
  3. if (strlen($cuenta2)!=4) return false;
  4. if (strlen($cuenta3)!=2) return false;
  5. if (strlen($cuenta4)!=10) return false;
  6.  
  7. if (mod11_cuenta_bancaria("00".$cuenta1.$cuenta2)!=$cuenta3{0}) return false;
  8. if (mod11_cuenta_bancaria($cuenta4)!=$cuenta3{1}) return false;
  9. return true;
  10. }
  11. //////////////////////////////////////////////////////////////////////////////////////
  12.  
  13. function mod11_cuenta_bancaria($numero){
  14. if (strlen($numero)!=10) return "?";
  15.  
  16. $cifras = Array(1,2,4,8,5,10,9,7,3,6);
  17. $chequeo=0;
  18. for ($i=0; $i < 10; $i++)
  19.     $chequeo += substr($numero,$i,1) * $cifras[$i];
  20.  
  21. $chequeo = 11 - ($chequeo % 11);
  22. if ($chequeo == 11) $chequeo = 0;
  23. if ($chequeo == 10) $chequeo = 1;
  24. return $chequeo;
  25. }

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: colombia, verificacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:18.