我正在查看一些将用户名转换为小写的代码,然后再存储它们。我90%肯定这是可以的,但是那里的系统实际上需要用户名的区分大小写(特别是在健康行业)吗?
注意:我的特定代码不在入境点。我们从其他系统获取用户名。我担心的是依赖于那些系统(可能在我们可能控制之下,也可能不在我们的控制之下),在相同的情况下始终传递用户名(当描述同一用户时)。
另外值得注意的是 - 代码是:
userName.toLowerCase(Locale.ENGLISH)
所有用户名都是英文的吗?这只是匹配数据库中的排序规则吗?请注意(至少在java中)String.toLowerCase()
定义为String.toLowerCase(Locale.getDefault())
答案 0 :(得分:21)
unix登录区分大小写...
还有其他系统可以做到吗?
答案 1 :(得分:6)
toLowerCase只有一个理由接受语言环境:
因为小写字母i在每种标准语言中都有一个点,所以字母I被转换为带有点的i。
但是在土耳其语中,还有一个大写字母,上面有一个点。这被转换成一个小写字母i。
“常规”土耳其首都我被转变为一个小的ı - 没有一个点。
所以,除非你的土耳其用户名都被称为IiI1I1iiII,否则我几乎不担心这个。
除土耳其语之外的所有其他语言都具有相同的toLowerCaseImplementation。所以你可以选择Locale.ENGLISH或Locale.GERMAN等等。只是确保你不挑土耳其。
请参阅javadoc for more detailed information
编辑:感谢utku karatas我可以/在帖子中复制粘贴正确的字形。
答案 2 :(得分:3)
使用区分大小写的用户名/密码是提高安全性的简便方法,因此问题是,您对安全性与可用性的关注程度。请记住,您正在寻找解决不区分大小写的方式可能存在一些本地化问题,但如果您不在乎,请不要担心。
答案 3 :(得分:2)
使用英语区域设置降低用户名是必然会导致问题。我建议使用不变文化进行小写。
答案 4 :(得分:1)
它取决于上下文,但在SQL的Informix方言中,有“所有者”(基本上等同于标准SQL中的模式),以及如何编写所有者名称很重要。
SELECT *
FROM someone.sometable, "someone".sometable,
SOMEONE.sometable, "SOMEONE".sometable
两个引用的名字肯定不同;两个非引用名称映射到相同的名称,它们(取决于数据库模式)可以是其他两个名称中的任何一个。有一些代码围绕着(未引用的)名称进行大小写转换。幸运的是,大多数情况下你不需要指定名称,而当你这样做时,你写的名字没有引号,一切都有效;或者你用引号写下这个名字并且是一致的,这一切都有效。但有时候,像我这样的人必须真正理解细节才能让程序在所有环节都能正常运作。
另外,(正如Stephen所说)Unix登录区分大小写,并且一直都是。我相信Windows登录大多不区分大小写 - 但我没有尝试过(有太多的方法可以搞砸Windows而不给游戏添加那种诡计)。
如果你真的想在Unix上混淆某人,请给他们一个数字用户名(例如123),但给他们一个不同的UID(例如234)。
答案 5 :(得分:1)
Kerberos也可以在Windows环境中使用,具有区分大小写的问题。您可以通过某种方式对其进行配置,以确保不会出现区分大小写问题,但也可以采用其他方式。
答案 6 :(得分:0)
如果您的唯一目标是将一个用户与另一个用户区分开来,那么您需要的不仅仅是案例,这似乎是合乎逻辑的。
答案 7 :(得分:0)
我从未遇到过对用户名强制区分大小写的系统(我也不想)。
代码最有可能强制它们在输入点处小写,以防止以后出现区分大小写问题。