|
- package id_validator
-
- import (
- "regexp"
- "strconv"
- "strings"
- "time"
- )
-
- // 检查ID参数
- func CheckIdArgument(id string) bool {
- return len(GenerateType(id)) != 0
- }
-
- // 生成数据
- func GenerateType(id string) map[string]string {
- lowerId := strings.ToLower(id)
-
- if len(lowerId) == 15 {
- return GenerateShortType(id)
- }
-
- if len(lowerId) == 18 {
- return GenerateLongType(id)
- }
-
- return map[string]string{}
- }
-
- // 生成短数据
- func GenerateShortType(id string) map[string]string {
- mustCompile := regexp.MustCompile("(.{6})(.{6})(.{3})")
- subMatch := mustCompile.FindStringSubmatch(id)
-
- return map[string]string{
- "body": subMatch[0],
- "addressCode": subMatch[1],
- "birthdayCode": "19" + subMatch[2],
- "order": subMatch[3],
- "checkBit": "",
- "type": "15",
- }
- }
-
- // 生成长数据
- func GenerateLongType(id string) map[string]string {
- mustCompile := regexp.MustCompile("((.{6})(.{8})(.{3}))(.)")
- subMatch := mustCompile.FindStringSubmatch(id)
-
- return map[string]string{
- "body": subMatch[1],
- "addressCode": subMatch[2],
- "birthdayCode": subMatch[3],
- "order": subMatch[4],
- "checkBit": subMatch[5],
- "type": "18",
- }
- }
-
- // 检查地址码
- func CheckAddressCode(addressCode string, birthdayCode string) bool {
- addressInfo := GetAddressInfo(addressCode, birthdayCode)
-
- return addressInfo["province"] != ""
- }
-
- // 检查出生日期码
- func CheckBirthdayCode(birthdayCode string) bool {
- year, _ := strconv.Atoi(Substr(birthdayCode, 0, 4))
- if year < 1800 {
- return false
- }
-
- _, error := time.Parse("20060102", birthdayCode)
-
- return error == nil
- }
-
- // 检查顺序码
- func CheckOrderCode(orderCode string) bool {
- return len(orderCode) == 3
- }
|