package services import ( "crypto/sha256" "encoding/hex" "strings" ) // NormalizeIDCard 归一化身份证号(去空格、末位 X 大写) func NormalizeIDCard(idCard string) string { idCard = strings.TrimSpace(idCard) return strings.ToUpper(idCard) } // HashIDCard 计算身份证号 SHA256 哈希,用于索引与匹配 func HashIDCard(idCard string) string { sum := sha256.Sum256([]byte(NormalizeIDCard(idCard))) return hex.EncodeToString(sum[:]) } // MaskIDCard 脱敏展示:350681********0611 func MaskIDCard(idCard string) string { id := NormalizeIDCard(idCard) if len(id) <= 10 { return id } return id[:6] + "********" + id[len(id)-4:] } // IdentityParams 从请求参数中提取的身份证与姓名 type IdentityParams struct { IDCard string Name string OK bool } // ExtractIdentityParams 从解密后的 params map 提取 id_card + name func ExtractIdentityParams(params map[string]interface{}) IdentityParams { idCard := firstNonEmptyString(params, "id_card", "idCard") name := firstNonEmptyString(params, "name") if idCard == "" { return IdentityParams{OK: false} } return IdentityParams{ IDCard: NormalizeIDCard(idCard), Name: strings.TrimSpace(name), OK: true, } } func firstNonEmptyString(params map[string]interface{}, keys ...string) string { for _, key := range keys { v, ok := params[key] if !ok { continue } if s, ok := v.(string); ok { s = strings.TrimSpace(s) if s != "" { return s } } } return "" }