2009-02-12 11 views
8

Sto guardando un codice che converte i nomi utente in lettere minuscole, prima di memorizzarli. Sono sicuro al 90% che va bene, ma ci sono sistemi là fuori che richiedono effettivamente la distinzione tra maiuscole e minuscole nei nomi degli utenti (in particolare nel settore sanitario)?I nomi degli utenti sono maiuscole e minuscole?

Nota: il mio codice particolare non è al punto di entrata. Stiamo prendendo i nomi degli utenti da altri sistemi. La mia preoccupazione dipende da quei sistemi (che possono o meno essere sotto il nostro controllo) per passare in modo coerente i nomi utente nello stesso caso l'uno dell'altro (quando si descrive lo stesso utente).

Degna di nota - il codice è:

userName.toLowerCase(Locale.ENGLISH) 

sono tutti i nomi utente in inglese? È così giusto che corrisponda alle regole di confronto nel database? Si noti che (in Java almeno) String.toLowerCase() è definito come String.toLowerCase(Locale.getDefault())

risposta

0

Se il tuo unico obiettivo è quello di differenziare un utente da un altro, sembra logico che tu voglia che il caso sia un fattore.

21

unix accessi sono case sensitive ...

Esistono altri sistemi che fanno questo?

+1

Qualcuno è in grado di dirmi perché questo è stato downvoted? Nel mio caso non è una risposta specifica, ma lo avrei ritenuto utile per gli altri. Cosa dà? – Stephen

+2

Odio drive-by down-votes. Purtroppo, accadono. –

+0

Bene, questo risponde esattamente a quello che è stato chiesto. Indica un caso in cui i nomi utente sono case sensitive. Ho svalutato questo. –

0

Non ho mai incontrato un sistema che ha imposto la distinzione tra maiuscole e minuscole sui nomi utente (né vorrei farlo).

Molto probabilmente il codice li impone in minuscolo nel punto di immissione come tentativo di prevenire problemi di distinzione tra maiuscole e minuscole.

+0

Ho modificato per notare che il nostro sistema non è quello che fornisce l'accesso. – Stephen

+0

'I nomi utente di Wikipedia sono case sensitive, ma la prima lettera è sempre automaticamente in maiuscolo 'tratto da https://en.wikipedia.org/wiki/Wikipedia:Username_policy – Jakob

+0

Mentre i nomi utente di Wikimedia/Wikipedia/MediaWiki fanno distinzione tra maiuscole e minuscole, il software impedisce due nomi utente che differiscono solo per la maiuscola. –

2

Il nome utente che utilizza il locale inglese in minuscolo è destinato a causare problemi. Suggerirei il minuscolo usando la cultura invariante.

+0

In Java, questo sarebbe Locale.ROOT – Stephen

+0

La cultura invariabile in .NET è comunque la lingua inglese. – Joshua

+3

@Joshua: si tratta di un dettaglio di implementazione interno su cui non si deve fare affidamento. –

6

toLowerCase ha una sola ragione per farlo accettare un locale:

fin da piccolo lettera i ha un punto in ogni lingua standard, la lettera I è trasformato in un io con un punto.

ma in turco, c'è anche una lettera maiuscola © con un punto sopra. questo è trasformato in una piccola lettera i.

il capitale turco "regolare" I viene trasformato in un ı piccolo senza punto.

quindi, a meno che i vostri nomi utente turchi non siano tutti chiamati IiI1I1iiII, non mi preoccuperei molto di questo.

ogni lingua diversa da quella turca ha un'identica implementazione di LaveCase. quindi potresti scegliere Locale.ITALIAN o Locale.GERMAN o qualsiasi altra cosa .. assicurati di non scegliere il turco.

vedono la modifica javadoc for more detailed information

: grazie alla Utku Karatas ho potuto/copia incolla i glifi corretti in THS posta.

+0

Hai un problema con il turco? In ogni caso non c'è motivo di essere pigri, quando si utilizza un locale invariante è tutto il lavoro necessario per supportare alcuni milioni di potenziali utenti. –

+1

Nessuna tastiera turca Andreas? :) Lasciatemi illustrare il problema ... lower ("I") = "ı", lower ("©") -> "i". –

+0

E tra Jeff ha un lungo post su questo problema .. http://www.codinghorror.com/blog/archives/001075.html –

0

Dipende dal contesto, ma nel dialetto Informix di SQL esistono "proprietari" (sostanzialmente equivalenti a uno schema in SQL standard) e il modo in cui si scrive il nome del proprietario è importante.

SELECT * 
    FROM someone.sometable, "someone".sometable, 
     SOMEONE.sometable, "SOMEONE".sometable 

I due nomi citati sono decisamente diversi; i due nomi unquote sono mappati sullo stesso nome, che (a seconda della modalità del database) potrebbe essere uno degli altri due. C'è del codice attorno al quale fa la conversione del caso sui nomi (non quotati). Fortunatamente, la maggior parte delle volte non è necessario specificare il nome e quando si scrive il nome senza virgolette tutto funziona; oppure scrivi il nome con le virgolette e sono coerenti e tutto funziona. Occasionalmente, però, le persone come me devono capire davvero i dettagli per far sì che i programmi funzionino in modo sano nonostante tutti i cerchi.

Inoltre, (come ha notato Stephen) gli accessi Unix fanno distinzione tra maiuscole e minuscole e lo sono sempre stati. Credo che gli accessi a Windows siano per lo più insensibili alle maiuscole e alle minuscole - ma non ci provo (ci sono troppi modi per incasinarsi su Windows senza aggiungere l'inganno del genere al gioco).

Se si desidera veramente confondere qualcuno su Unix, fornire loro un nome utente numerico (ad esempio 123), ma fornire un UID diverso (ad es. 234).

1

Kerberos, che può essere utilizzato anche in ambienti Windows, presenta problemi di distinzione tra maiuscole e minuscole. Puoi configurarlo in un certo modo per assicurarti che non si verifichino problemi di maiuscole e minuscole, ma può andare anche nell'altro modo.

3

L'utilizzo di password/nome utente sensibili al maiuscolo/minuscolo è un modo semplice per aumentare la sicurezza, quindi la domanda è: quanto ti preoccupi per la sicurezza e l'usabilità. Tieni presente che il modo in cui stai cercando di risolvere l'insensibilità del case potrebbe avere alcuni problemi di localizzazione, ma se non ti interessa, non preoccuparti.

Problemi correlati