Prueba Serial

Iniciado por elkiy, 22 Febrero 2013, 19:22 PM

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

elkiy

Bueno aver me descarge el codigo, le puse la sangri y demás para poder enterderlo bien, tengo conocimiento en c++ y php, pero de java nada (me olvide lo poco que sabia je), igual algo se entiende, bueno me fije lo que pide y lo pase a pseudocodigo, espero que esté bien, igual en la funcion IsNumeric (sText) hay me pierdo todo.

Lo que logré saber:

1ro: es un codigo que tiene 16 caracteres.

Código (javascript) [Seleccionar]

function ver (cod)
{

   if (cod.length != 16)
   {
     alert("Codigo No Valido");
     return false;
    }


2do: cvd tiene un solo caracter
cod tiene 15.

Código (javascript) [Seleccionar]
cvd = cod.substr(15,1);
cod = cod.substr(0,15);


3ro: SI no es un codigo de 15 caracteres O su codigo tiene letras
               Codigo No valido.
Código (javascript) [Seleccionar]

if (cod.length != 15 || IsNumeric(cod) == false)
{
alert("Codigo No Valido");
return false;
}


Todo esto me cuesta, no logró entender bien, mas las cosas que nombra

Código (javascript) [Seleccionar]
for (i=0;i<cod.length;i++){
  if (i%2 == 0){
  tmp = cod.substring(i,i+1) * 1;
 
  }
  else{
  tmp = cod.substring(i,i+1) * 2;
  }
 
 if (tmp >= 10){
 tmp = tmp.toString();
 tmp = tmp.substr(0,1) + tmp.substr(1,1);
 }
 
chk = chk.concat(tmp);
}

tmp = '';


for (i=0;i<chk.length;i++){
tmp = (tmp*1) + (chk.charAt(i)*1);
}


tmp = tmp.toString();
chk = (tmp.substr(0,1)*1) + (tmp.substr(1,1)*1);
chk = chk * 10;
chk = (chk*1) - (tmp*1);
cvs = chk % 10;


SI al final la variable cvs es identica a cvd
    Verdadero
Sino
   Codigo No valido

Código (javascript) [Seleccionar]
if (cvs == cvd)
 {
 return true;
 }
 else
 {
 alert("Codigo No Valido");
 return false;
 }
}



Por las dudas codigo completo es:

Código (javascript) [Seleccionar]
function ver (cod) {

if (cod.length != 16){
alert("Codigo No Valido");
return false;
}

var codx =new Array(cod);
var chk = '';
var tmp;
var cvs;
var cvd;

cvd = cod.substr(15,1);
cod = cod.substr(0,15);

if (cod.length != 15 || IsNumeric(cod) == false){
alert("Codigo No Valido");
return false;
}

for (i=0;i<cod.length;i++){
  if (i%2 == 0){
  tmp = cod.substring(i,i+1) * 1;
 
  }
  else{
  tmp = cod.substring(i,i+1) * 2;
  }
 
 if (tmp >= 10){
 tmp = tmp.toString();
 tmp = tmp.substr(0,1) + tmp.substr(1,1);
 }
 
chk = chk.concat(tmp);
}

tmp = '';


for (i=0;i<chk.length;i++){
tmp = (tmp*1) + (chk.charAt(i)*1);
}


tmp = tmp.toString();
chk = (tmp.substr(0,1)*1) + (tmp.substr(1,1)*1);
chk = chk * 10;
chk = (chk*1) - (tmp*1);
cvs = chk % 10;

 if (cvs == cvd){
 
 return true;
 }
 else{
 alert("Codigo No Valido");
 return false;
 }
}


function IsNumeric(sText)

{
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;


  for (i = 0; i < sText.length && IsNumber == true; i++)
     {
     Char = sText.charAt(i);
     if (ValidChars.indexOf(Char) == -1)
        {
        IsNumber = false;
        }
     }
  return IsNumber;
 
  }

Epzylon

El serial ingresado debe tener 16 caracteres
Este serial se dividirá en dos partes:
cvd = último número del serial y es como un número de verificación
cod = es el serial que se analizará en el codigo

Aquí se recorre cod número por número
si el número es par, se lo adiciona en la variable chk,
si es impar, se lo multiplica por dos, si el resultado es mayor o igual a 10,
se suman los dos primeros dígitos del resultado y se lo adiciona en la variable chk.

Cuando digo adiciona, no quiero decir que se lo suma, si no que se lo concatena.



for (i=0;i<cod.length;i++){
   if (i%2 == 0){
   tmp = cod.substring(i,i+1) * 1;

   }
   else{
   tmp = cod.substring(i,i+1) * 2;
   }

  if (tmp >= 10){
  tmp = tmp.toString();
  tmp = tmp.substr(0,1) + tmp.substr(1,1);
  }

chk = chk.concat(tmp);
}


Aquí se suman número por número cada uno de los dígitos de la variable chk previamente obtenida y se guarda el resultado en tmp

tmp = '';

for (i=0;i<chk.length;i++){
tmp = (tmp*1) + (chk.charAt(i)*1);
}



Aquí viene lo interesante:

Se suman los dos primeros caracteres de tmp y lo guardamos en chk,
luego lo multiplicamos x 10
y restamos chk menos tmp.
Luego obtenemos cvs del módulo de chk por 10.

tmp = tmp.toString();
chk = (tmp.substr(0,1)*1) + (tmp.substr(1,1)*1);
chk = chk * 10;
chk = (chk*1) - (tmp*1);
cvs = chk % 10;


Si cvs y chk son iguales, wala!