Digito verificador cedula uruguaya

¿Nuevo en Apache OpenOffice? ¿No sabe cómo comenzar o dónde hacer su pregunta? ¡Este es el lugar!
Reglas del Foro
Los moderadores podrían mover los temas creados aquí a un foro más apropiado.
Si usted publicó aquí y no encuentra el tema, puede buscar sus mensajes haciendo clic en la opción «Buscar sus mensajes» que se encuentra justo debajo de la cabecera de la página, junto al panel de control de usuario y al acceso a sus mensajes privados.

Digito verificador cedula uruguaya

Notapor iatech » Mié Nov 28, 2012 8:42 pm

Hola a todos esta es mi primer consulta en este foro, estoy necesitando verificar mediante un digito verificador la cedula uruguaya en una celda contigua a donde se ingrese el numero de cedula.
A continuacion paso la forma en como se calcula dicho digito verificador.

Como calcular el digito verificador de la CI Uruguaya
¿Es el número de cédula 1234567-2 es válido?

La Cédula de Identidad de la República Oriental del Uruguay es un documento emitido por la Dirección Nacional de Identificación Civil quien depende del Ministerio del Interior.
Dicho documento tiene como propósito llevar registro de cada individuo sea oriundo o nacionalizado en la república.

El numero de una cédula de identidad tiene exactamente 7 dígitos al cual se le adiciona un dígito verificador.

Es así que un número valido debe respetar el siguiente formato:

a.bcd.efg-h

El dígito posterior al guión (h) es también llamado dígito verificador.

Para obtener h debemos:

Multiplicar a,b,c,d,e,f,g por las siguientes constantes: (a; b; c; d; e; f; g) .* (2; 9; 8; 7; 6; 3; 4)
El resultado de la suma s = 2*a + 9*b + 8*c + 7*d + 6*e + 3*f + 4*g es dividido por 10 quedándonos con resto (M = s modulo 10)
Finalmente h = (10 – M) % 10

Ejemplo practico:
Si la CI es 1.234.567:

s = 2*1 + 9*2 + 8*3 + 7*4 + 6*5 + 3*6 + 4*7 = 148
M = 148 % 10 = 8
h = (10 – 8) % 10 = 2
Obteniendo que 1.234.567-2 es un número de CI valido.

Desde ya agradezco su respuesta y su ayuda en dicho problema para poder encontrar un script o formula para resolverlo
windows xp LibreOffice 3.5.7.2
iatech
 
Mensajes: 4
Registrado: Mié Nov 28, 2012 7:57 pm

Re: Digito verificador cedula uruguaya

Notapor mauricio » Jue Nov 29, 2012 4:32 am

Un intento de resolverlo hubiese sido muy bueno...

Mira si así esta bien...

Saludos
Adjuntos
DigitoVerificador.ods
(12.4 KiB) 291 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.0 | LibO 4.0 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 3418
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Digito verificador cedula uruguaya

Notapor iatech » Jue Nov 29, 2012 3:13 pm

Hola muchas gracias Mauricio lo que tu me enviaste me sirve pero da error cuando tengo un numero de cedula tiene 6 digitos , se que anteriormente me explique mal disculpame soy novato de verdad de igual manera estaria necesitando implementarlo en la siguiente planilla que te envio a continuacion por si tu o el foro me pueden ayudar
Muchas Gracis por todo.
Adjuntos
Poderes_macro.ods
(16.68 KiB) 96 veces
Última edición por mauricio el Jue Nov 29, 2012 4:39 pm, editado 1 vez en total
Razón: Quitar cita que solo repite el primer mensaje y no es necesario
windows xp LibreOffice 3.5.7.2
iatech
 
Mensajes: 4
Registrado: Mié Nov 28, 2012 7:57 pm

Re: Digito verificador cedula uruguaya

Notapor xiseme » Jue Nov 29, 2012 6:57 pm

Aprovechándonos de la función de Mauricio, se me ocurre poner opciones para que la función pueda devolvernos el dígito de control, la cédula completa, o si es correcto el número de cédula (para usarla para validar, por ejemplo)

Como 0000123 es distinto de 1230000 :mrgreen: con Format(123,"0000000") creo que funcionará

Este es un posible código** (¡ mejórese, por dios, mejórese ! :mrgreen: )
Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit


Function DigitoVerificador(CodigoId As String, Optional Opcion As Variant) As Variant
'Solo toleramos valores 123, 123-1, 0001234, 0012345-1, 1234567 ó 1234567-1
'Opciones
'   0= devuelve el dígito
'   1= devuelve el indentificador completo con dígito correcto
'   otros= Verdadero/Falso si es ok o no
If IsMissing(Opcion) Then Opcion=0

'Filtrar errores: ( si guión → debiera ser formato 1234567-1)
'más de un dígito post-guión
'no es número antes guión
'número de más de 7 dígitos

Dim PosG As Integer
Dim CI As String
   PosG=InStr(CodigoId,"-")
Select Case PosG
   Case 0:      CI = CodigoId    'no hay guión
   Case Else   'Hay guión → a su derecha solo debe haber un número de un dígito
             If (Len(CodigoId) - PosG) <2 And IsNumeric(Mid(CodigoId,PosG+1)) Then
                CI=Left(CodigoId,PosG-1)   'toma el valor a izq de "-"
             Else
                Goto NoVale
             End If
End Select

If IsNumeric(CI) And Val(CI)<10000000 Then   'es número de 7 o menos cifras
   'Parece que IsNumeric devuelve True con cadenas que acaban en "e" o "d"   1234e 12d ?????
   'Provisionalmete lo salvamos con
      If  Right(UCase(CI),1)="E" Or Right(UCase(CI),1)="D" Then GoTo NoVale
   Dim mV() As Integer
   Dim lSuma As Long
   Dim co1 As Byte
       CI = Format(CI,"0000000")
      mV = Array(2, 9, 8, 7, 6, 3, 4)
      For co1 = LBound(mV) To UBound(mV)
         lSuma = lSuma + Val(Mid(CI,co1+1,1)) * mV(co1)
      Next
      DigitoVerificador = (10-(lSuma Mod 10)) Mod 10
      Select Case Opcion
         Case 0:   DigitoVerificador = DigitoVerificador   'XD
         Case 1: DigitoVerificador = CI & "-" & DigitoVerificador
         Case Else:                                  
                  If DigitoVerificador = Val(Right(CodigoId,1)) Then
                        DigitoVerificador = 1
                  Else
                        DigitoVerificador = 0
                  End If                  
      End Select
   Exit Function
End If

NoVale:
   DigitoVerificador="No es valor de cédula"

End Function


aplicado en el ejemplo
Poderes_macro_Mod.ods
(16.66 KiB) 91 veces


** No entiendo porqué (a mi? en todos mis sistemas?) IsNumeric con cadenas acabadas en «e» o «d» (solo con e y d) como "123d" "1234567e" me dice que son números.
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
xiseme
 
Mensajes: 1103
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Digito verificador cedula uruguaya

Notapor mauricio » Jue Nov 29, 2012 7:09 pm

xiseme escribió:** No entiendo porqué (a mi? en todos mis sistemas?) IsNumeric con cadenas acabadas en «e» o «d» (solo con e y d) como "123d" "1234567e" me dice que son números.

Mira esta entrada: viewtopic.php?f=50&t=7167&p=27978&hilit=isnumeric#p27625
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.0 | LibO 4.0 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 3418
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Digito verificador cedula uruguaya

Notapor FORNELASA » Jue Nov 29, 2012 9:01 pm

Hola...
¿y cuando son 6 digitos como es el calculo?
Con el ejemplo de los 7 digitos debes poner la macro en un modulo ooBasic de tu archivo, mira por favor el ejemplo abajito.
Viendo lo que hizo Mauricio se puede hacer una formula matricial, mira el ejemplo abajito.

Saludos, Federico.
Adjuntos
PoderesMacro.ods
Con Macro
(19.22 KiB) 54 veces
PoderesFormula.ods
Con Formula
(18.15 KiB) 79 veces
OpenOffice 4.0.1
LibreOffice 4.0.6.2 | Lotus Symphony 3.0.1
En Windows 7 Home Basic
Avatar de Usuario
FORNELASA
 
Mensajes: 1163
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Digito verificador cedula uruguaya

Notapor iatech » Vie Nov 30, 2012 4:06 pm

Hola federico muchas gracias por la formula por mis conocimientos es lo que mas se ajusta a mis necesidades,agradezco a todos por responderme y enseñarme todo sus conocimientos.
El calculo de cuando son 6 digitos se debe de agregar un ( 0) cero al inico del numero y se ve que es por eso en que la formula cuando son 6 digitos no me da el digito verificador correcto.
Sigo aprendiendo y tratando de comprender la formula.
Les agradezco por su tiemo y ver si se puede terminar el calculo del digito verificador

Gracias a todos
Saludos
Ignacio
windows xp LibreOffice 3.5.7.2
iatech
 
Mensajes: 4
Registrado: Mié Nov 28, 2012 7:57 pm

Re: Digito verificador cedula uruguaya

Notapor FORNELASA » Vie Nov 30, 2012 5:27 pm

Hola...
Con 6 y 7 dígitos, a ver si así:

Saludos, Federico.
Adjuntos
PoderesFormula.ods
Dígito Ver. con 6 y 7 caracteres
(18.81 KiB) 85 veces
OpenOffice 4.0.1
LibreOffice 4.0.6.2 | Lotus Symphony 3.0.1
En Windows 7 Home Basic
Avatar de Usuario
FORNELASA
 
Mensajes: 1163
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Digito verificador cedula uruguaya

Notapor xiseme » Vie Nov 30, 2012 9:14 pm

¿No son posibles números de cédula inferiores al 100.000?
En ese supuesto caso, ¿no se podría usar TEXTO(G,"0000000")?
{=RESIDUO(10-RESIDUO(SUMA(VALOR(MID(TEXTO(G5;"0000000");FILA(INDIRECTO("1:"&LARGO(TEXTO(G5;"0000000"))));1))*{2|9|8|7|6|3|4});10);10)}

@mauricio: gracias por recordármelo. Al ver el hilo me he acordado de haberlo leído ya, peeero mi memoria se ve que ya no es tan buena
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
xiseme
 
Mensajes: 1103
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Digito verificador cedula uruguaya

Notapor FORNELASA » Sab Dic 01, 2012 4:00 am

Hola xiseme, pues si, si funciona y me parece un buen tip, esperemos a ver que dice iatech.

Saludos, Federico.
OpenOffice 4.0.1
LibreOffice 4.0.6.2 | Lotus Symphony 3.0.1
En Windows 7 Home Basic
Avatar de Usuario
FORNELASA
 
Mensajes: 1163
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Digito verificador cedula uruguaya

Notapor iatech » Lun Dic 03, 2012 3:17 pm

Hola buenos dias a todos, gracias por haberme respondido y solucionado un tema que me tenia preocupado, la respuesta y archivo que me envio Federico en su archivo adjunto Poderesformula.ods me ha funcionado lo he probado con digitos de 6 y 7 cifras que son las que tengo que usar y me funciono.
Luego he podido ver que xiseme realizo un par de preguntas en las que adjunto una solucion y Federico afirmo que eran correctas.
Con respecto a la formula o el cambio que xiseme propone y Federico afirma que es correcto no soy capaz de comprenderla ya que copio ese archivo en la celda y me da error de formula.
Esta es la solucion de xiseme a la cual Federico afirma que es la solucion definitiva esperando por mi respuesta .

¿No son posibles números de cédula inferiores al 100.000?
En ese supuesto caso, ¿no se podría usar TEXTO(G,"0000000")?
{=RESIDUO(10-RESIDUO(SUMA(VALOR(MID(TEXTO(G5;"0000000");FILA(INDIRECTO("1:"&LARGO(TEXTO(G5;"0000000"))));1))*{2|9|8|7|6|3|4});10);10)}

Disculpen mi ignorancia espero poder en el futuro tambien poder colaborar en el foro tanto como ustedes lo han echo por mi.
Pero en difinitiva cual formula ustedes creen que debo de usar ya que esta formula que Federico propuso si me funciono.

=RESIDUO(10-RESIDUO(SUMA(VALOR(MID(SI(LARGO(G5)=6;CONCATENAR("0";G5);G5);FILA(INDIRECTO("1:"&LARGO(SI(LARGO(G5)=6;CONCATENAR("0";G5);G5))));1))*{2;9;8;7;6;3;4});10);10)

Desde mi lado de un simple usuario les agradezco mucho todo su trabajo.

Saludos
Ignacio
windows xp LibreOffice 3.5.7.2
iatech
 
Mensajes: 4
Registrado: Mié Nov 28, 2012 7:57 pm

Re: Digito verificador cedula uruguaya

Notapor FORNELASA » Lun Dic 03, 2012 6:00 pm

Hola...
¡¡¡ ah !!! lo que pasa es que la sugerencia de xiseme de usar TEXTO(G5,"0000000") es un lujo super valido :super: :lol: se usaría en vez de esta parte de la formula
SI(LARGO(G5)=6;CONCATENAR("0";G5);G5). Miremos por favor el archivo ejemplo.

Cuando xiseme dice "¿No son posibles números de cédula inferiores al 100.000?" te pregunta si es posible usar en cedulas de identificacion 5 o menos digitos
100000 menos 1 = 99999 (5 digitos, al menos eso entendí), lo cual se resolveria simplemente usando TEXTO(G5,"0000000") sin ninguna condicionante extra.

Es decir, con TEXTO(G5,"0000000") podemos usar ó 7 ó 6 ó 5 o ....... digitos, siempre y cuando la regla sea agregar el cero a la izquierda.

Si una formula nos resuelve un problema entonces debemos usarla (aunque siempre es mejor usar la formula mas corta)


Saludos, Federico.
Adjuntos
PoderesFormula.ods
Formula usando TEXTO(G5;"0000000")
(18.24 KiB) 44 veces
OpenOffice 4.0.1
LibreOffice 4.0.6.2 | Lotus Symphony 3.0.1
En Windows 7 Home Basic
Avatar de Usuario
FORNELASA
 
Mensajes: 1163
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Digito verificador cedula uruguaya

Notapor mauricio » Lun Dic 03, 2012 6:48 pm

En mi opinión, la función "siempre" debe de recibir el argumento correcto, si el argumento siempre es de 7 caracteres, entonces, "antes" de pasar el argumento, este ya debe esta con siete posiciones, ahora, ¿el argumento es un número o es texto?, por los ceros a la izquierda, creo que es texto, entonces, siempre debe de tener la forma "0000000", con lo que la función solo hace el trabajo de obtener el digito verificar, y... ya sea usando las excelente formulas escritas por los compañeros o la función personalizada en Basic que hice la inicio, debe de funcionar...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.0 | LibO 4.0 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 3418
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Digito verificador cedula uruguaya

Notapor FORNELASA » Lun Dic 03, 2012 7:37 pm

Hola...
En mi opinión, una forma de hacer lo que comenta Mauricio es obligar al usuario a escribir siempre 7 digitos en la celda (agregando una validacion de datos a cada celda en donde longitud de texto = 7)
como en el ejemplo siguiente:

Saludos, Federico.
Adjuntos
PoderesMacro2.ods
Con validez longitud = 7
(19.75 KiB) 49 veces
OpenOffice 4.0.1
LibreOffice 4.0.6.2 | Lotus Symphony 3.0.1
En Windows 7 Home Basic
Avatar de Usuario
FORNELASA
 
Mensajes: 1163
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Digito verificador cedula uruguaya

Notapor mauricio » Lun Dic 03, 2012 9:58 pm

Simplificando.. se formatea el argumento para que siempre tenga 7 digitos, se usa una formula matricial, recuerden, presionar CTRL+SHIFT+ENTER para editarla.
Código: Seleccionar todo   Expandir vistaContraer vista
{=RESIDUO(10-RESIDUO(SUMA(VALOR(MID(A1,{1;2;3;4;5;6;7},1))*{2;9;8;7;6;3;4}),10),10)}

o se usa una formula personalizada en Basic donde obtenemos el mismo resultado:
Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit

Function DigitoVerificador(CI As String) As Integer
Dim mV() As Integer
Dim lSuma As Long
Dim co1 As Byte

   mV = Array(2, 9, 8, 7, 6, 3, 4)
   For co1 = LBound(mV) To UBound(mV)
      lSuma = lSuma + Val(Mid(CI,co1+1,1)) * mV(co1)
   Next
   DigitoVerificador = (10-(lSuma Mod 10)) Mod 10

End Function

Por ejemplo
Código: Seleccionar todo   Expandir vistaContraer vista
2613216   4   4
2613217   0   0
2613218   6   6
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.0 | LibO 4.0 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 3418
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Digito verificador cedula uruguaya

Notapor xiseme » Mar Dic 04, 2012 11:43 am

Entiendo que el propósito de la consulta es obtener el dígito de control que le corresponde a un número, para obtener el número de cédula completo: creo que esa parte ya está; vía fórmula, vía código. ;)

No obstante, no se debe de olvidar que el objeto de los dígitos de control es asegurar datos correctos; por lo que también éste debiera ser introducido**.
A ver si me explico menos mal que de costumbre.
Siendo 8 el dígito de control ...
No debieran permitirse números 1234567, 12345, ni siquiera 0012345. Solo 12345678, 123458 ... de tal forma que si hay un error al digitar este pueda ser detectado
Si marcamos como obligatorio longitud=7, o cualquier validación que no incluya el D.Control, ...
supongamos que debemos introducir el 1234567
- el 1234567 será admitido, pero si ponemos erróneamente 1134567 también será validado.
- Si obligamos a introducir el dígito de control ... el 12345672 será admitido pero el 11345672 no (nótese que el último 2 es el «verificador» que corresponde al 1234567)

En mis «peleas» con estos casos :crazy:
    1.- Cuando uno crea/gestiona introducción y proceso de datos :
      1.1.-Obligar a que el dato introducido tenga el formato deseado: longitud, texto, número, etc. (dígito de control incluído)
      1.2.-No permitir «separadores» en el identificador 12345678 sí, no 1234567-8, ni 1234567 8, *
    Esta validación es aún mucho más necesaria si eventualmente, pueden ser introducidos por terceras personas.

    2.- Cuando recibimos datos de otros estos pueden venir:
      2.1.-sin el dígito de control
        2.1.1.- los 7 dígitos (texto): 1234567; 0012345; ...
        2.1.2.- sólo los dígitos «significativos» (números o texto): 1234567; 12345; ...
      2.2.- incluído el dígito de control (8) con sus variantes.
        2.2.1.-seguidos:12345678; 00123458; ...
        2.2.2.-separados: 1234567-8; 1234567 8; 1234567/8; 0012345-8; 12345-8; ...
Es útil tener una(s) función(es) personalizada(s) que homogeneíce(n) estos datos y/o que nos diga si son correctos o no.

* Recordar que 12345678 puede visualizarse como 1234567-8 en Menú → Formato → Celdas → Definido por usuario Formato código= #-#

**De hecho el dígito de control forma parte del identificador, de la cédula, del DNI, ... el id de cédula es 12345672 no el 1234567; el DNI es 12345678Z no el 12345678.
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
xiseme
 
Mensajes: 1103
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Digito verificador cedula uruguaya

Notapor mauricio » Mar Dic 04, 2012 8:05 pm

De acuerdo, pero... una cosa sería obtener el digito y otra cosa validar el digito, ¿que queremos que haga la función exactamente?...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.0 | LibO 4.0 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 3418
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.


Volver a Principiantes

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados