Fórmula para el DNI no completo según la Ley 3/2018, de 5 de diciembre de Protección de Datos

La LO 3/201 de 5 de diciembre, de Protección de Datos Personales y Garantía de los Derechos Digitales, en su Disposición Adicional 7.ª, establece que "En ningún caso debe publicarse el nombre y apellidos de manera conjunta con el número completo del documento nacional de identidad...". A los amigos/as que me quieran ayudar les solicito un "truco" para que una lista en la que los campos de columnas son

NOMBRE     APELLIDO1     APELLIDO 2      D.N.I.

Manolo        Pérez                López                24235678

María           Torres               Gómez              45678123

se pueda hacer que la columna D.N.I. Pase a mostrarse así

NOMBRE     APELLIDO1     APELLIDO 2      D.N.I.

Manolo        Pérez                López                ***356**

María           Torres               Gómez              45***123

Alternando los "números D.N.I." en asteriscos en cada uno de los registros de participantes. Pensad en listas de muchos registros, cambiando de un "plumazo" todos, alternando los números de los números de DNI entre asteriscos y números, no verticalmente, sino indistintamente, es decir la posición X de número de cada DNI no ha de ser un asterisco, sino que la posición X es en un registro asterisco, en otra número, en otra asterisco, o número, y otro número, luego asterisco, o sea así

34***90*

**234***

*56**78*

6****78*

etc, etc.

POR FAVOR, soy torpe, os solicitaría algo "sencillo" y comprensible para "torpes" como yo.

2 Respuestas

Respuesta
2

Seguramente habrá varias maneras de resolverlo... mi propuesta es con fórmulas y sería así:

Considero la primer letra del Apellido1. Y según eso será el modelo de cifrado.

Establecí 4 condiciones pero bien podrías agregar algunas más dividiendo el total de letras / la cantidad de condiciones.

Necesitarás una columna para colocar este nuevo formato y seguramente ocultarás la que tiene el nro completo.

Mi fórmula presenta como separador el punto y coma ... cambia por tu separador si utilizas solo coma.

=SI(IZQUIERDA(B2;1)<"F";"***"&EXTRAE(D2;4;3)&"**";SI(IZQUIERDA(B2;1)<"L";EXTRAE(D2;1;3)&"***"&EXTRAE(D2;7;2);SI(IZQUIERDA(B2;1)<"R";EXTRAE(D2;1;2)&"***"&EXTRAE(D2;6;2)&"*";"*****"&EXTRAE(D2;6;3))))

Elsa Matilde,

¡Muchas gracias! 

La probaré mañana con mis listados, en mi puesto en la Administración.

GRACIAS

Srta. Elsa, gracias. Acabo de probar su "truco" o fórmula, pero soy torpe, y no veo que funcione.

He redactado una columna NOMBRE (van nombre y apellidos en una celda), en otra columna DNI. En el registro 1 van NOMBRE y DNI (dos columnas) así

NOMBRE                             DNI 

Pepe Cifuentes López       15678987                (Celda DNI entre asteriscos)

en la "Celda DNI entre asteriscos" D2 he puesto su fórmula, y supongo que debo "estirarla hacia abajo" pero el resultado que me da es #¿NOMBRE?  con punto y coma, y con coma como vd. me recomendó. 

Si puede vd. seguir ayudándome, le quedo agradecida.

GRACIAS.

Noe

Es que mostraste imágenes con columnas separadas para nombres y 2 apellidos.

Si vas a utilizar 1 sola columna, digamos A, cambia la letra en la fórmula, donde dice B2 debe decir A2 en cada aparición... o la columna que utilices.

El nro de doc lo tengo en col D que está oculta. En tu caso reemplaza todas las apariciones de D2 por la celda que sea, que imagino será B2... o donde ubiques los números completos.

PD) Cuando de celdas se trata siempre es recomendable dejar una imagen de los encabezados.. o sino indicarlos: Col A = Nombres y Apellidos y así con el resto.

Sdos!

¡Gracias! 

Srta. Elsa Matilde, seguí con su "fórmula", así

=SI(IZQUIERDA(A2;1)<"F";"***"&EXTRAE(D2;4;3)&"**";SI(IZQUIERDA(A2;1)<"L";EXTRAE(D2;1;3)&"***"&EXTRAE(D2;7;2);SI(IZQUIERDA(A2;1)<"R";EXTRAE(D2;1;2)&"***"&EXTRAE(D2;6;2)&"*";"*****"&EXTRAE(D2;6;3))))

cambiando a A2... y tampoco me da el resultado. Es más me da un cuadrado de "errores". 

Siento ser torpe, y no saber explicarme. Mi listado es de más de 4000 registros, repartidos en dos columnas  NOMBRES  y DNI.  NOMBRES es los dos apellidos, coma nombre. DNI no lleva punto, o sea que el registro de la línea 1A son dos encabezados NOMBRES y DNI. A partir de ahí, 2A, 3A, 4A, 5A, etc, etc... son el dato DOS APELLIDOS, NOMBRE (Pérez López, Manolo)... y en la columna B, en B2 un DNI, en B3 otro, en B4 otro DNI, etc, etc...

POR FAVOR, si me pueden seguir ayudando, les quedo agradecida.

MUCHAS GRACIAS.

Noelia

En la portada de mi sitio aparecen mis correos. Escribime para que te pase el ejemplo ( o me envías tu hoja). O déjame tu correo y yo te escribo.

Sdos!

Respuesta
2

Si tus listados son grande con fórmulas se va a volver lento el proceso por los recalculos que se hacen cada que se actualice una celda, mira la imagen y este es el resultado de la macro, otro punto es que no dijiste donde comienzan tus datos ni cuantas columnas la componen así que asumí que tus datos empiezan en A1, la macro lo que hace es primero leer los datos de la columna DNI y asigna al azar un valor 3 y 5 que serán la cantidad de números que cambiara por astericos, luego hará una segunda asignación de números entre 0 y 9 los cuales buscara en ese DNI en especifico, si el numero al azar no esta presente simplemente elegirá otro numero, lo buscara y hará el reemplazo quedando lo que ves en la imagen

y esta es la macro, lo único que tienes que hacer es copiarla de este página y pegarla en un modulo estándar de VBA para lo cual después de copiarla, entras a Excel, presionas Alt+F11, luego insertar y click en modulo después dar control+V y pegas, modificas la macro solo en la primera línea el A1 lo cambias por la celda donde comienzan tus datos y la corres ya sea dentro del modulo VBA presionando F5, o bien agregando un botón de formulario a la hoja o programando una secuencia de teclas como por ejemplo alt + DE y listo, la macro hará el reemplazo de asteriscos en automático.

Sub poner_asteriscos()
Set datos = Range("a1").CurrentRegion
With datos
    filas = .Rows.Count
    For i = 2 To filas
        DNI = .Cells(i, 4)
otro:
        aleatorio = WorksheetFunction.RandBetween(3, 5)
        If aleatorio = 3 Or aleatorio = 5 Then
            For j = 1 To aleatorio
denuevo:
                azar = WorksheetFunction.RandBetween(0, 9)
                On Error Resume Next
                busca = WorksheetFunction.Search(azar, DNI, 1)
                If Err.Number > 0 Then GoTo denuevo
                On Error GoTo 0
                DNI = WorksheetFunction.Replace(DNI, busca, 1, "*")
            Next j
        Else
            GoTo otro:
        End If
        .Cells(i, 4) = DNI
    Next i
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas