unit test

This commit is contained in:
libin
2023-03-22 08:25:31 +08:00
parent 708c2166c6
commit 4b8442d00e
4 changed files with 120 additions and 121 deletions

View File

@@ -1,33 +1,40 @@
package validUtil
import (
"regexp"
)
// IsBankCardNo 验证是否为大陆银行卡号
func IsBankCardNo(cardNo string) bool {
// 银行卡号长度为 16-19 位
if len(cardNo) < 16 || len(cardNo) > 19 {
func IsBankCardNo(cardNumber string) bool {
if len(cardNumber) != 16 && len(cardNumber) != 19 {
return false
}
// 银行卡号必须为数字
match, _ := regexp.MatchString("^[0-9]+$", cardNo)
if !match {
var cardArr []int
for _, c := range cardNumber {
if c < '0' || c > '9' {
return false
}
// 使用 Luhn 算法验证银行卡号的合法性
var sum int
for i, c := range cardNo {
num := int(c - '0')
cardArr = append(cardArr, int(c-'0'))
}
if len(cardArr) == 16 {
sum := 0
for i := len(cardArr) - 1; i >= 0; i-- {
if i%2 == 0 {
num *= 2
if num > 9 {
num -= 9
cardArr[i] *= 2
if cardArr[i] > 9 {
cardArr[i] -= 9
}
}
sum += num
sum += cardArr[i]
}
return sum%10 == 0
} else {
sum := 0
for i := len(cardArr) - 1; i >= 0; i-- {
if (len(cardArr)-i)%2 == 0 {
cardArr[i] *= 2
if cardArr[i] > 9 {
cardArr[i] -= 9
}
}
sum += cardArr[i]
}
return sum%10 == 0
}
}

View File

@@ -1,39 +1,49 @@
package validUtil
import "testing"
import (
"testing"
)
// 测试IsBankCardNo函数
func TestIsBankCardNo(t *testing.T) {
tests := []struct {
name string
cardNo string
wantRes bool
}{
{"empty cardNo", "", false},
{"less than 16 digits", "123456789012345", false},
{"more than 19 digits", "12345678901234567890", false},
{"contains non-numeric characters", "1234567a890123456", false},
{"valid cardNo with 16 digits", "6222020123456789", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := IsBankCardNo(tt.cardNo)
if got != tt.wantRes {
t.Errorf("IsBankCardNo(%s) = %t, want %t", tt.cardNo, got, tt.wantRes)
}
})
}
testCases := []struct {
name string
input string
cardNum string
expected bool
}{
{
name: "valid bank card number with 15 digits",
input: "123456789012345",
expected: false,
},
{
name: "invalid bank card number with less than 15 digits",
input: "123456789012",
expected: false,
},
{
name: "invalid bank card number with more than 19 digits",
input: "12345678901234567890",
expected: false,
},
{
name: "invalid bank card number with non-digit characters",
input: "12345abc6789012345",
expected: false,
},
{"case 1", "1234567890123456", false},
{"case 2", "6217000010081698261", true},
{"case 3", "6227000010081698261", false},
{"case 4", "621700001008169826", false},
{"case 5", "62170000100816982612", false},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := IsBankCardNo(tc.input)
result := IsBankCardNo(tc.cardNum)
if result != tc.expected {
t.Errorf("input(%s) expected %v, but got %v", tc.input, tc.expected, result)
t.Errorf("expected %v, but got %v", tc.expected, result)
}
})
}

View File

@@ -23,20 +23,22 @@ func TestIsTime(t *testing.T) {
}
func TestIsDate(t *testing.T) {
if !IsDate("2023-03-11") {
t.Error("Expected true, got false")
testCases := []struct {
input string
expected bool
}{
{"2021-01-01", true},
{"2021/01/01", false},
{"2021-13-01", false},
{"2021-02-29", false},
{"2020-02-29", true},
}
if IsDate("2023-02-29") {
t.Error("Expected false, got true")
for _, testCase := range testCases {
result := IsDate(testCase.input)
if result != testCase.expected {
t.Errorf("IsDate(%v) = %v, expected %v", testCase.input, result, testCase.expected)
}
if IsDate("2023-04-31") {
t.Error("Expected false, got true")
}
if IsDate("2023-13-01") {
t.Error("Expected false, got true")
}
if IsDate("2023-03-11 12:34:56") {
t.Error("Expected false, got true")
}
}

View File

@@ -1,61 +1,41 @@
package validUtil
//import "testing"
//
//func TestIsIDCard(t *testing.T) {
// // 18位身份证号码测试
// cases18 := []struct {
// input string
// want bool
// }{
// {"", false},
// {"123456789012345678", false},
// {"12345678901234567X", false},
// {"12345678901234567x", false},
// {"360313198909085215", true},
// {"36031319890908521x", true},
// {"36031319890908521X", true},
// {"110101198001010018", true},
// {"11010119800101001X", true},
// {"11010119800101001x", true},
// {"320311770706001", false},
// {"32031119770706001X", false},
// {"360313198909285215", false},
// {"360313198909085211", false},
// {"360313198912345678", false},
// }
// for _, c := range cases18 {
// got := IsIDCard(c.input)
// if got != c.want {
// t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
// }
// }
//
// // 15位身份证号码测试
// cases15 := []struct {
// input string
// want bool
// }{
// {"", false},
// {"12345678901234", false},
// {"1234567890123X", false},
// {"1234567890123x", false},
// {"320311770706001", true},
// {"330782820506908", true},
// {"620321871001001", true},
// {"622922780623068", true},
// {"632523830310017", true},
// {"130283820529063", true},
// {"340702800818200", true},
// {"110000400101001", true},
// {"110000500101001", false},
// {"110000200101001", false},
// {"110000700101001", false},
// }
// for _, c := range cases15 {
// got := IsIDCard(c.input)
// if got != c.want {
// t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
// }
// }
//}
import "testing"
func TestIsIDCard1(t *testing.T) {
// 18位身份证号码测试
cases18 := []struct {
input string
want bool
}{
{"", false},
{"123456789012345678", false},
{"12345678901234567X", false},
{"12345678901234567x", false},
{"120103199001015953", true},
}
for _, c := range cases18 {
got := IsIDCard(c.input)
if got != c.want {
t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
}
}
}
func TestIsIDCard2(t *testing.T) {
// 15位身份证号码测试
cases15 := []struct {
input string
want bool
}{
{"", false},
{"12345678901234", false},
{"1234567890123X", false},
}
for _, c := range cases15 {
got := IsIDCard(c.input)
if got != c.want {
t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
}
}
}