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

标签 java

在我的国家/地区,我们使用 11 位数字作为国家 ID。哪个选项更适合用 Java 表示它们,long 还是 String(或者其他选项,如果有更合适的话)?

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

  • 不会从零开始
  • 正好 11 位数字
  • 一些算法,例如(第一位数字 + 最后一位数字)/10 等于第三位数字等。

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

**关于第 3 条的澄清: 我对算术计算的意思是,不会有像 (id * 2/3) + 10 之类的东西。算法只是一堆检查用户输入的规则,而不是每次都询问政府网络服务。

最佳答案

这里有两个单独的问题:

  • 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
}

关于java - 如何在 Java 中表示大数字 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161525/

相关文章:

java - 附加变量进行 HTTP 调用时失败

java - Junit:断言列表至少包含一个符合某些条件的属性

java - 将持久化实体保留在事务之外

java - 匿名类实例中使用的未引用对象不会过期吗?

java - 识别当前正在处理的元素

java - 使用牛顿法求平方根的时间复杂度

java - 我可以使组件透明而不隐藏它吗?

java - Apache Shiro LDAP 配置(两步身份验证)

java - 将数组中的整个数组内容转入

java - 使用 Hibernate Criteria 从最后一个 NULL 条目中获取条目