如何在Java中表示大数字ID?

时间:2015-12-08 16:51:32

标签: java

在我的国家,我们使用11位数字作为国家ID。哪个选项最好用Java表示,long或String(如果有更合适的话,可以选择其他选项)?

国家ID不会受到任何算术计算,但如果我们使用String,则需要检查它是否为数字。在这两个选项中,需要根据以下某些规则进行检查:

  • 以零开始
  • 正好是11位
  • 某些算法(如第一个数字+最后一个数字)/ 10等于第三个数字等。

此外,它们将用于REST api调用,因此可能有许多涉及它们的请求(序列化 - 反序列化 - 验证等)。

**关于子弹3的澄清: 算术计算的意思是,它不会像(id * 2/3)+ 10等。算法只是一堆规则来检查用户输入,而不是每次都要求政府网络服务。

4 个答案:

答案 0 :(得分:4)

这里有两个不同的问题:

  • Java代码:我会将ID的概念封装在一个自己的类中 - 一旦你完成了,你可以选择你认为更好的内部表示,你甚至可以在路上改变它
  • 序列化:您提到REST - 它是一种文本格式,因此REST消息将包含字符串表示

类似的东西:

class Id {
  //internal representation
  long id;
  //or
  String id;

  //public methods
  String getIdAsString();

  //factory or use constructors
  static Id of(String id) //include validation code
  static Id of(long id); //include validation code
}

答案 1 :(得分:3)

对于您想要为上一个项目符号点执行的算术,字符串更好。在索引处获取字符并将其转换为int比在数字中的某个位置获取值更容易。

答案 2 :(得分:2)

你提到了:

  

National Ids不受任何算术计算的影响

然后你写道:

  

某些算法(如第一个数字+最后一个数字)/ 10等于第三个数字   等

如果你需要做算术并检查它是否是数字,那么使用Long to String总是更好。 此外,如果我需要检查特定位置的值,并且架构不会更改,我将创建一个表示我的ID的类,并对其进行一些正则表达式验证。

答案 3 :(得分:-2)

使用BigInteger / BigDecimal等。