2015-12-08 31 views
0

在我的國家,我們使用11位數字作爲國內ID。哪種選擇最好用Java來表示它們,long或String(或者如果更合適的話,還有其他選項)?如何在Java中表示大數字ID?

國家ID將不受任何算術計算,但如果我們使用字符串,它需要檢查,如果它是數字。在這兩個選項,他們需要對一些規則,如進行檢查:

  • 不會與零
  • 正好11位
  • 一些算法像(第一位數+最後一位數字)開始/ 10等於第三個數字等

此外,他們將用於REST API調用,所以可能有很多涉及他們的請求(序列化 - 反序列化 - 驗證等)。

**關於項目符號3的澄清: 算術計算的意思是,不會有像(id * 2/3)+ 10等等。算法只是一組規則來檢查用戶輸入每次都要求政府網站服務。

+0

你可以專注你的問題嗎? – Abdelhak

+0

無論什麼選擇最適合您的需求哼 –

+1

我會在這種情況下使用字符串,原因是我可以很容易地使用Apache公共庫驗證如果字符串是數字或不是和檢查字符串的第一個數字是否爲零等等。 – Raf

回答

2

你提到:

的國家標識將不會受到任何算術計算

但你寫:

一些算法像(第一位數+最後一位數字)/ 10等於第3位 等

如果您需要進行算術運算並檢查它是否爲數字,則最好使用Long比String更好。 此外,如果我需要檢查特定位置上的值,並且架構不會更改,我將創建一個表示我的ID的類並對其進行一些正則表達式驗證。

+0

算術計算的含義是,像(id * 2/3)+ 10等等。算法只是一堆規則來檢查用戶輸入,而不需要每次詢問政府Web服務。 – Reek

+0

是的,所以這個「算法」在你的情況下可以是簡單的正則表達式,在你自己的類定義上執行。 –

+0

它可能是計算一些校驗和數字,這在長ID號中很常見。這些計算是在數字上而不是代碼的數字值,因此將其存儲爲長時間不會有幫助。 – Hoopje

-2

使用的BigInteger/BigDecimal的等

+0

爲什麼你會使用BigInteger或BigDecimal這個? –

+1

爲什麼BigInteger?龍將是絕對足夠的。 –

3

的字符串是你想爲你的最後一顆子彈一點上做算術更好。在索引處獲取一個字符並將其轉換爲一個int比在一個數字中的特定位置獲取該值更容易。

+0

支持此答案,請參閱apache commons庫,它可以對字符串進行大量操作http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/math /NumberUtils.html – Raf

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 
} 
相關問題