身份證號碼解析 驗證工具3

2022-08-11 01:27:14 字數 2454 閱讀 8030

前兩天的進度似乎有些慢,今天加快了一點, 不把每一步說的那麼詳細了.

繼性別和生日之後,最後乙個資訊塊,只是列出測試如下.

這是乙個比較大的問題. 前面,我臨時性的把不同地方的驗證去掉了. **原作者也過來, 暢敘了他關於驗證的看法. 他是對的, 這種完全驗證的方式,根本上說是 ddd的設計思想。不過,想我所說,我知識臨時性的去掉,保證測試的單元性。驗證的功能,由驗證的測試來驅動。而第二點考慮,我的驗證打算放在構造器中,也就是說,如果,有任何錯誤的輸入,連第一道門都進不來。

這裡,測試和實現都很簡單,看起來很多,只是一些羅列,不同的錯誤場景而已。

[c#]view plain

copy

[subject(

"身份證,有效性"

)]  

public

class

when_create_social_id_with_valid_format   

[subject("身份證,有效性"

)]  

public

class

when_create_social_id_with_null_string   

[subject("身份證,有效性"

)]  

public

class

when_create_social_id_with_empty_string   

[subject("身份證,有效性"

)]  

public

class

when_create_social_id_with_2_length_string   

[subject("身份證,有效性"

)]  

public

class

when_create_social_id_with_20_length_string   

[subject("身份證,有效性"

)]  

public

class

when_create_social_id_alphet_length_string   

實現[c#]view plain

copy

public

socialid(string cardnumber)  

驗證碼是個特殊的有效性檢查,較為複雜,我這裡,把這部分邏輯**提煉出來成為乙個驗證器。

測試極其簡單,和實現幾乎原封不動。

測試:[c#]view plain

copy

public

class

when_verify_soical_number:specification

;  private

it verify_code_should_match =  

() => code.shouldequal('4'

);  

private

static

char

code;  

}  實現

[c#]view plain

copy

namespace

skight.eliteweb.domain.specs.properties  

;  /**

* 18位身份證中,各個數字的生成校驗碼時的權值

*/private

static

int verify_code_weight =  

;  private

static

intcard_number_length = 18;  

public

char

verify(

string

source)  

return

verify_code[sum%11];  

}  }  

}  這時候,身份證構造器的完整實現就變成了

[c#]view plain

copy

public

socialid(string cardnumber)  

至此,**已經很乾淨了。 是的,還有進一步的改進,如,3個元素(地區,生日,性別)的提煉應該移到構造器中,各個提取的功能就變成了,簡單的資料讀取。social 的型別,不是class而是struct,因為這是典型的value object。 另外,我把15轉18位的部分也去掉了,這可以看作乙個utilit,可以在外部做,不是核心功能。

最後,欣賞一下測試結果:

完整**:

身份證號碼驗證

說明 驗證身份證的有效性 引數 cid 身份證號碼 返回 地方 出生時間 性別 private string checkcidinfo string cid if cid.length 18 char c cid cid.length 1 bool last false if c 0 c 9 c a...

驗證身份證號碼

好久沒更新了,今天簽到啦。感覺這個驗證挺重要的,也挺常用的,所以分享給需要的朋友。驗證身份證號碼,在網上找到的好東東 function checkidcard idcard var idcard,y,jym var s,m var idcard array new array idcard arra...

驗證身份證號碼

var idcardnoutil powers 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 paritybit 1 0 x 9 8 7 6 5 4 3 2 genders checkaddresscode function addresscode test address...