用户信息脱敏处理Go语言实现


对用户的姓名、电话号码、邮箱、身份证等信息进行脱敏处理。

import (
    "regexp"
    "strings"
)
// 匹配 手机号,邮箱,中文,身份证等等 进行脱敏处理
func HideStar(str string) (result string) {
    if str == "" {
        return "***"
    }
    if strings.Contains(str, "@") {
        // 邮箱
        res := strings.Split(str, "@")
        if len(res[0]) < 3 {
            resString := "***"
            result = resString + "@" + res[1]
        } else {
            res2 := Substr2(str, 0, 3)
            resString := res2 + "***"
            result = resString + "@" + res[1]
        }
        return result
    } else {
        reg := `^1[0-9]\d{9}$`
        rgx := regexp.MustCompile(reg)
        mobileMatch := rgx.MatchString(str)
        if mobileMatch {
            // 手机号
            result = Substr2(str, 0, 3) + "****" + Substr2(str, 7, 11)
        } else {
            nameRune := []rune(str)
            lens := len(nameRune)
            if lens <= 1 {
                result = "***"
            } else if lens == 2 {
                result = string(nameRune[:1]) + "*"
            } else if lens == 3 {
                result = string(nameRune[:1]) + "*" + string(nameRune[2:3])
            } else if lens == 4 {
                result = string(nameRune[:1]) + "**" + string(nameRune[lens-1:lens])
            } else if lens > 4 {
                result = string(nameRune[:2]) + "***" + string(nameRune[lens-2:lens])
            }
        }
        return
    }
}

func Substr2(str string, start int, end int) string {
    rs := []rune(str)
    return string(rs[start:end])
}

测试代码

import (
    "fmt"
    "testing"
)
// 脱敏测试
func TestStar(t *testing.T) {
    // 邮箱
    result := HideStar("1511X2456@qq.com") // 151***@qq.com
    fmt.Println(result)
    // 电话号码
    result = HideStar("13077881053") // 130****1053
    fmt.Println(result)
    // 身份证
    result = HideStar("362201200005302565") // 36***15
    fmt.Println(result)
    // 姓名
    result = HideStar("小叮当") // 小*当
    fmt.Println(result)
}

关注微信公众号:【皮卡战记】

皮卡战记

文章作者: Pikaman
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Pikaman !
评论
 上一篇
MyBatis面试题 MyBatis面试题
1、什么是Mybatis(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。直接编写原生态sql,可以严格
2020-02-05
下一篇 
多线程面试题 多线程面试题
本文转载自:https://blog.csdn.net/cmyperson/article/details/79610870 目录: 什么是线程? 什么是线程安全和线程不安全? 什么是自旋锁? 什么是Java内存模型? 什么是CAS?
2020-01-21