Si dice che si è certi che non ci sono valori duplicati nelle parole. Per spingerlo oltre, sei sicuro che i primi 8 caratteri in ogni parola sarebbero unici?
In tal caso, è possibile utilizzare la seguente formula. Funziona prendendo singolarmente il codice ASCII di ogni personaggio - 40 [assumendo caratteri normali, questo mette i numeri tra 8 & 57 e lettere tra 57 & 122] e moltiplicando quel codice di caratteri di 10^[la posizione delle cifre di quel personaggio nella parola ]. Fondamentalmente prende quel codice di carattere [-40] e concatena ogni codice al successivo.
EDIT Si noti che questo codice non richiede più che nella parola siano presenti almeno 8 caratteri per impedire un errore, poiché la parola effettiva da codificare è adesa ad 8 "0".
=TEXT(SUM((CODE(MID(LOWER(RIGHT(REPT("0",8)&A3,8)),{1,2,3,4,5,6,7,8},1))-40)*10^{0,2,4,6,8,10,12,14}),"#")
Si noti che, come tale utilizza i valori ASCII dei caratteri, l'ID # potrebbe essere utilizzato per identificare direttamente il nome - questo in realtà non crea l'anonimato, appena gira 8 personaggi unici in un numero univoco. È offuscato con il -40, ma non proprio "sicuro" in questo senso. Il -40 è solo per ottenere lettere e numeri normali nell'intervallo di 2 cifre, in modo che moltiplicando per 10^0,2,4 ecc. Si creerà un add-on unico di 2 cifre per il codice creato.
EDIT PER ALTERNATIVA METODO
precedenza avevo tentato di fare questo in modo che sarebbe guardare ad ogni lettera dell'alfabeto, contare il numero di volte che compare nella parola, e poi moltiplicare per 10 * [la posizione di quella lettera nell'alfabeto]. Il problema con questa operazione (vedere il commento sotto per la formula) è che richiedeva un numero di 10^26-1, che va oltre la precisione in virgola mobile di Excel. Tuttavia, ho una versione modificata di questo metodo:
Limitando il numero di caratteri consentiti nell'alfabeto, è possibile ottenere la dimensione totale massima possibile a 10^15-1, che Excel può calcolare correttamente.La formula è simile al seguente:
=RIGHT(REPT("0",15)&TEXT(SUM(LEN(A3)*10^{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}-LEN(SUBSTITUTE(A3,MID(Alphabet,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},1),""))*10^{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}),"#"),15)
[destra ("00.000 miliardi" ... parte della formula è destinata a mantenere tutti i codici lo stesso numero di caratteri]
Si noti che qui, alfabeto è un stringa denominata che contiene i caratteri: "abcdehilmnorstu" .Ad esempio, utilizzando la formula precedente, la parola "asdf" conta le istanze di a, s edd, ma non "f" che non è nel mio alfabeto contratto. codice di "asdf" sarebbe:
Questo funziona solo con le seguenti ipotesi:
Le lettere non elencate (né numeri/caratteri speciali) non sono tenuti a rendere ogni nome univoco. Ad esempio, asdf & asd avrebbe lo stesso codice nel metodo precedente.
E,
L'ordine delle lettere non è tenuto a rendere ogni nome univoco. Ad esempio, asd & dsa avrebbe lo stesso codice nel metodo precedente.
Eventuali requisiti per la lunghezza o i caratteri utilizzati nell'ID? – Excellll