This commit is contained in:
Mrx
2026-05-09 12:15:25 +08:00
parent 7aa4fb60f6
commit 93886e2e90
11 changed files with 413 additions and 40 deletions

View File

@@ -0,0 +1,60 @@
package querysubject
import (
"strings"
)
func isNameField(key string) bool {
key = strings.ToLower(key)
if isPhoneField(key) || isIDCardField(key) {
return false
}
return strings.Contains(key, "name") || strings.Contains(key, "姓名") ||
strings.Contains(key, "owner") || strings.Contains(key, "main")
}
func isIDCardField(key string) bool {
key = strings.ToLower(key)
return strings.Contains(key, "idcard") || strings.Contains(key, "id_card") ||
strings.Contains(key, "身份证") || strings.Contains(key, "证件号")
}
func isPhoneField(key string) bool {
key = strings.ToLower(key)
return strings.Contains(key, "phone") || strings.Contains(key, "mobile") ||
strings.Contains(key, "手机") || strings.Contains(key, "电话")
}
// ExtractPlainSubject 从解密后的 query 参数 map 中提取被查询人姓名、手机、身份证(首次匹配优先)
func ExtractPlainSubject(m map[string]interface{}) (name, mobile, idCard string) {
walkMap(m, &name, &mobile, &idCard)
return name, mobile, idCard
}
func walkMap(m map[string]interface{}, name, mobile, idCard *string) {
for k, v := range m {
switch val := v.(type) {
case string:
assignSubjectField(k, val, name, mobile, idCard)
case map[string]interface{}:
walkMap(val, name, mobile, idCard)
}
}
}
func assignSubjectField(key, val string, name, mobile, idCard *string) {
if val == "" {
return
}
if *idCard == "" && isIDCardField(key) {
*idCard = val
return
}
if *mobile == "" && isPhoneField(key) {
*mobile = val
return
}
if *name == "" && isNameField(key) {
*name = val
}
}