sql - 名+姓+生日组合是否足够独特?

标签 sql asp.net database algorithm database-design

我需要有关算法/数据库设计的帮助,以帮助我目前正在开发的基于web的应用程序(我很抱歉提前问了这么长的问题)
申请说明:
我正在建立一个客户登记站(基本上只是一个显示器,显示一个网页并连接到扫描仪),在这里,进入办公室(类似于图书馆)的客户可以扫描他们的办公室身份证(上面有一个唯一的条形码)来登记,客户信息(名字,姓氏,出生日期,签入时间…)将被发送/保存到服务器上,并且Office管理员将能够看到谁现在在办公室并执行任务…)
为新客户创建身份证时,只需提供以下信息:姓名、姓氏和出生日期(客户可以是从小孩到老人的任何年龄段)=>系统将生成唯一的条形码(16位)并打印出新的身份证(只有条形码)
问题:
如果客户忘记/丢失了他们的身份证,或者有时卡太旧,所以条码不能被扫描,客户可以在登记处输入他们的第一个+姓和出生日期,然后系统将搜索(名字+姓+出生日期),并确定该客户是否存在并检查他们。但有可能不止一个人有相同的名字+生日:
-系统可以将所有匹配的人显示到屏幕上,但客户如何知道他们自己是谁?
-或者,如果系统不允许具有相同名称和DOB的客户首先保存到数据库中,则可以避免这种情况。但之后,排在第二位的顾客会非常不高兴,因为他/她没有卡:))
编辑:
我该如何处理这个问题,我的意思是这只是一个办公室,所以我们不能要求SSN或驾驶执照…登记手续必须简单快捷,其中一些人可能是没有任何身份证或电话的孩子(他们会和父母/监护人一起来),许多人是老年人(70岁以上,甚至80岁以上),他们甚至不能键入“身份证-扫描想法是为了帮助他们-他们需要做的就是扫描他们的卡…(我想他们永远记不住“安全问题”),短信验证将不起作用(电话号码可能会改变,不是所有的客户都有电话,运营商会在这里参与(覆盖范围,费率收费…)我不想要任何。
好的,在阅读了你所有的建议之后:
我在想一个4位数的密码(就像信用卡背面的3位数安全码)——它会打印在身份证上,上面有说明和所有东西,这与唯一的客户号码(用于扫描)不同,它的工作原理如下:
-在创建新的客户身份证时,系统将要求额外的4位密码,并将其打印到卡上,还将在卡上放置一个算法,以确保具有相同姓名+出生日期的客户不能具有相同的密码。
如果客户不能使用/遗失卡,在输入姓名+出生日期办理入住手续后,系统只询问此4位密码是否有1人以上匹配,否则只有1人匹配,系统将在右侧办理入住手续。
如果他们忘记了密码,我的意思是他们自己也无能为力,接待员必须设法帮助他们,你们怎么想,我仍然愿意接受建议?
我的最终解决方案:
因为卡片上没有其他(客户信息)而不是条形码(客户编号),所以最好的方法是预先打印(预先制作)卡片,将它们放在桌子上,以便送给新客户或用于更换卡片。
创建新客户时,接待员将手动输入名字+姓氏+出生日期+电话号码(可选)+电子邮件(可选)+家庭地址+客户号码(与他们将要给客户的卡中的号码相同)+。提交后,系统会对所有东西进行检查,如果一切都好,前台会给客户一张新卡=>客户返回办理登机手续的车站办理登机手续。
当顾客忘记刷卡时=>他们需要见接待员=>执行验证过程=>接待员将手动为他们办理入住手续。
当客户丢失卡或卡损坏时=>他们需要见接待员=>执行验证过程=>接待员然后给客户一张替换卡=>客户返回登记站并办理登记手续。

最佳答案

一些漫无边际的想法:
您可以为用户分配一个PIN,并使用它使帐户唯一。想必为了确保它是唯一的,你必须分配它,你不能让他们发明一个。(你可以让他们发明一个,然后验证它的独特性。这可能有助于人们使用对自己有意义的数字,这样他们就能记住这些数字。)最大的问题是,如果这个人丢失了他的密码,你就被卡住了。如果卡上印了个人识别码,如果卡损坏或磨损,他们可以输入个人识别码。但如果他们丢了卡,他们可能没有其他的密码记录。
你可以问他们的电话号码并用它作为识别码。我的杂货店那样做是为了他们的折扣卡。我想现在几乎每个人都有电话。对于没有的小号码,您可以生成一个看起来像电话号码但无效的随机号码(因此它不会巧合地复制任何真实的电话号码),并将其用作pin。例如,如果你在美国,你可以让生成的数字都从555-555开始,然后让最后4位数字像一个pin。那么唯一会有问题的人就是那些没有电话和信用卡丢失的人,这应该是一个很小的数字。
这个系统中有没有任何机密信息,或者人们是否承诺花钱?我的意思是,如果有人走到一个信息亭,输入他隔壁邻居的名字和出生日期,然后访问那个人的帐户,那会是个问题吗?你还没说系统是做什么的。如果进入系统让某人可以访问此人的医疗记录、银行账户或他最后一次向牧师忏悔的记录,那么你必须采取措施防止未经授权的访问,你不能让任何人上来声称自己是别人而进入。我想起几年前的一个案例,一个记者获得了一些政客的DVD租赁记录。他显然是希望能发现自己租了很多下流的色情作品,或者是一些可以用来让这家伙难堪的东西,尽管事实证明,大部分都是西部片。我的观点是,即使是看似无辜的信息,在正确的情况下也会让某人感到尴尬,所以你必须小心。
人们多久丢失或损坏一次卡片?在这种情况下,有没有可以帮助别人的职员?也就是说,如果99%的时间有人进来刷卡,他进来了,一切都很好,而且有人丢失或损坏卡的次数非常少,你可以说,在这种情况下,他们必须去找店员出示损坏的卡,或者如果他们说他们丢失了卡,出示身份证。然后店员可以核实任何东西并给他们一张新卡。你可以让店员按姓名搜索,并有一个显示出生日期和地址的屏幕,问顾客他们的出生日期和地址是什么,如果匹配,给他们一张新卡,如果不是,说对不起,你没有存档。这与向客户显示出生日期和地址列表并让他们选择一个(客户可以选择的)的安全性观点完全不同,(a)键入一个通用或无意中听到的名称,然后选择显示的任何匹配条目,甚至(b)使用此项查找他们想骚扰的人的地址,然后你就有责任了。

关于sql - 名+姓+生日组合是否足够独特?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569679/

相关文章:

sql - 全文搜索 CONTAINSTABLE

sql-server - SQL Server 的多个实例用于连接还是无连接?

php - WP - 用于在数据库中创建时间戳的按钮

mysql - 选择包含几乎重复的行

javascript - 当对话框在 IE11 中再次出现时按钮不会更改为禁用

sql - Rails 中相乘的列的总和

sql - 如何聚合描述列?

sql - 使用 XML 数据类型读取存储在 SQL Server 2008 R2 中的 XML 文档

c# - 如何在 ASP.NET C# 应用程序中使用 SSL

c# - 使用 C# 填充 bootstrap 下拉列表