Files
tyapi-server/internal/domains/api/services/query_whitelist_helpers.go

66 lines
1.5 KiB
Go
Raw Normal View History

2026-06-18 21:16:02 +08:00
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 ""
}