61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
|
|
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
|
||
|
|
}
|
||
|
|
}
|