Files
tyapi-server/internal/domains/api/services/query_whitelist_helpers.go
2026-06-18 21:16:02 +08:00

66 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ""
}