电话号码应该是字符串还是某种能够保存电话号码的数字类型?

问题描述 投票:10回答:4

我们想存储10位数的手机号码,即9999999999。它应该是数字还是字符串数据类型?我们不想对此进行任何计算或操作操作

哪个更好的记忆和性能明智?

c# sql phone-number telephony
4个回答
29
投票

ITU-T recommendation E.164表示国家/地区代码需要3位数字,国家/地区拨号计划中的目录号码最多需要15位数字。

并且,许多人添加了一些标点符号。例如:

+1.212.555.1212是北美的数字。它也可以在北美中心应用程序中呈现(212)555-1212。

32个字符的文字应该在全世界范围内起作用。

不要使用号码,否则你会后悔的。我是:两件事。

  • 由于我们假设所有电话号码都是NANP-compliant的十位数字,因此失去了一家公司的欧洲业务。
  • 电子表格导出以科学记数法2.12555E+09呈现数字这几乎和SIRI一样愚蠢,告诉我你有两个bllion,一亿二千五百万的电话....

电话号码簿号码不是数字数据类型。看看这个:Falsehoods Programmers Believe About Telephone Numbers


3
投票

它必须是stringas电话号码将超过int或甚至long的限制。因此,为了处理这些场景,总是首选string


2
投票

有几件事要记住:

通常,您未计划进行计算的数字应存储为字符串形式。如果您需要能够以零开头的号码(就像您所做的那样,因为有些电话号码会这样做),这一点至关重要。

因此,即使(或何时)您能够将电话号码存储为一个巨大的整数(您可以使用64位整数),您也不应该这样做。一旦数字以零开头,您将丢失数据。

存储电话号码时,请记住国家/地区代码是一种特殊类型的信息。如果在存储时将其与数字的其余部分分开,则最好。通过这种方式,您可以轻松地按国家/地区查询电话号码,并且您不必多次处理数字的解析(在存储之前,而不是每次获取时)。此外,如果您将电话号码与国家/地区代码一起存储,则需要对该内容进行验证以确保始终存储国家/地区代码,因为如果一个国家/地区代码具有国家/地区代码,则来自两个不同国家/地区的两个数字可能相同另一个没有。

还要记住,标点符号是一种表示方法,因此与存储数据的方式无关。您始终可以选择以您希望的方式呈现数据,并且在所有情况下您希望的方式取决于许多因素。例如,您呈现的是哪种类型的数据,您要向谁展示,以及在某些情况下甚至在您呈现数据时。对于电话号码,您应该将号码存储为字符串,不带任何标点符号。

我建议您查看Google的库,以便解析,格式化和验证国际电话号码(https://github.com/googlei18n/libphonenumber)。您可以为此库提供您的电话号码和国家/地区代码,它会为您提供大量有用的信息,例如数字是否可行,它属于哪个区域,数字是什么类型等等。

专业提示I:为您的用户提供一种方法来选择该号码所属的国家/地区,而不是让他们输入国家/地区代码。更适合您,更好地为您的用户服务。

专业提示II:很少有“北美中心应用程序”或“以此为中心的应用程序插入区域”,特别是如果您的应用程序可在网上获得。它确实发生了,但它很少见,所以你应该明智地为这个世界准备你的应用程序,而不是它的一小部分。


-1
投票

您可以使用“ulong”存储长整数值。并且要读取特定值或电话号码,您可以使用“Convert.ToUInt64(Console.ReadLine());”

© www.soinside.com 2019 - 2024. All rights reserved.