domingo, 8 de mayo de 2011

Algoritmo de Verificacion de Cedula Ecuatoriana

Hace algún tiempo estuve buscando algo sobre la verificación de este tipo de identificacion pero encontré ciertas implementaciones no óptimas y por eso decidí investigar como se lo hacia manualmente, el proceso es el siguiente:

-      La cedula ecuatoriana está formada por los dos primeros dígitos que corresponden a la provincia donde fue expedida, por lo cual los dos primeros números no será mayor a 24 ni menor a 1.

-       El tercer digito es un número menor a 6 (0, 1, 2, 3, 4, 5).

-      Los siguientes hasta el noveno digito son un número consecutivo.

-      Y el décimo digito es el digito verificador.

Los coeficientes usados para verificar el décimo dígito de la cédula, mediante el algoritmo “Módulo 10”

COEFICIENTES = 2.1.2.1.2.1.2.1.2



C#:
Visual Studio 2010 framework 4.0

JAVA: Neetbeans 7.0




7 comentarios:

  1. Muchas gracias, me sirvio mucho, justo lo que necesitaba, con exepcion del codigo de ruc publico, no valida correctamente, pero lo demas muy bueno, gracias

    ResponderEliminar
    Respuestas
    1. Me da gusto que te haya servido !!!
      El codigo de ruc publico lo voy a revisar

      Eliminar
  2. La más didactica de explicaciones. Gracias !

    ResponderEliminar
  3. Muy bueno tu aporte, les dejo el enlace del documento directo del SRI donde indica los pasos para la verificacion de la cedula, ruc, juridico, publico y persona natural

    http://www.sri.gob.ec/DocumentosAlfrescoPortlet/descargar/11a5917c-ea28-46f8-bb19-3737bf6cd07b/Estructura+del+RUC.doc

    ResponderEliminar
  4. esto es lo q he estado necesitando,,, me gustaria q me ayuden..porq me sale error: no todas las rutas de codigo devuelven un valor

    ---public bool VerificaCedula(string ced)----





    ResponderEliminar
  5. Podrian ayudarme con el codigo en javascript?

    ResponderEliminar
  6. Si alguien necesita en Filemaker el Algoritmo de Verificacion de Cedula Ecuatoriana:
    Let ( [
    digitos = Length ( Cedula_ID ) ;
    provincia = Left ( Cedula_ID ; 2 ) ;
    tercer_digito = Middle ( Cedula_ID ; 3 ; 1 ) ;
    ult_digito = Right ( Cedula_ID ; 1 ) ;
    digito_verificador = Let ( [ suma_digitos = Let ( [
    suma_pares = Let ( [ digito2 = Middle ( Cedula_ID ; 2 ; 1 ) ;
    digito4 = Middle ( Cedula_ID ; 4 ; 1 ) ;
    digito6 = Middle ( Cedula_ID ; 6 ; 1 ) ;
    digito8 = Middle ( Cedula_ID ; 8 ; 1 ) ] ; Sum ( digito2 ; digito4 ; digito6 ; digito8 )
    ) ;
    suma_impares = Let ( [ digito1 = If ( 2 * Middle ( Cedula_ID ; 1 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 1 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 1 ; 1 ) ) ;
    digito3 = If ( 2 * Middle ( Cedula_ID ; 3 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 3 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 3 ; 1 ) ) ;
    digito5 = If ( 2 * Middle ( Cedula_ID ; 5 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 5 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 5 ; 1 ) ) ;
    digito7 = If ( 2 * Middle ( Cedula_ID ; 7 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 7 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 7 ; 1 ) ) ;
    digito9 = If ( 2 * Middle ( Cedula_ID ; 9 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 9 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 9 ; 1 ) ) ] ; Sum ( digito1 ; digito3 ; digito5 ; digito7 ; digito9 )
    )
    ] ; Sum ( suma_pares ; suma_impares ) )

    ] ; If ( ( 1 + Left ( suma de pares e impares ; 1 ) ) * 10 - suma de pares e impares = 10 ; 0 ; ( 1 + Left ( suma de pares e impares ; 1 ) ) * 10 - suma de pares e impares ) )

    ] ; digitos = 10 and provincia ≥ 1 and provincia ≤ 24 and tercer_digito ≥ 0 and tercer_digito ≤ 5 and ult_digito = digito_verificador
    )

    ResponderEliminar