首页 / 资讯中心 / 文章详情

04 9个方法搞定敏感信息脱敏,打码规则统一收在一个类里

04 9个方法搞定敏感信息脱敏,打码规则统一收在一个类里 ★ FEATURED ARTICLE
AI人工智能 「AI大模型」AI_Agent智能体实战项目保姆级文档 目录一、工具类功能二、所需环境三、方法与调用示例按需调用四、工具类源码可直接复制一、工具类功能把手机号、身份证、卡号、姓名、邮箱、地址、密码处理成能安全写日志、也能直接展示给前端的打码形态规则收在一个类里不让各业务方各写一套正则。二、所需环境JDK 17或以上三、方法与调用示例按需调用方法序号1方法用途按「留前几位、留后几位」把中间字符换成掩码其余字段方法都是它的封装规则集中一处维护不用每个业务方各写一套正则去刮日志方法定义public static String mask(String raw, int prefix, int suffix)️入参解释public static String mask(原始字符串, 左侧保留位数, 右侧保留位数)返回值解释String掩码后的字符串掩码字符固定是*边界口径null与空串原样返回不抛异常也不会变成一串掩码保留位数之和达到总长度时输出全掩码长度与原串一致切分点落在代理对中间时该代理对整体归入掩码部分不会留下半个代理对造成乱码只有负位数这一编程错误会抛IllegalArgumentException消息把 prefix 与 suffix 都打出来方法示例mask(1234567890, 2, 3)拿到12*****890mask(abc, 2, 2)保留位数之和达到总长度拿到***mask(abcd, 2, 2)拿到ab**cd代理对整对进掩码mask(null, 2, 1)拿到nullmask(12345, -1, 2)抛IllegalArgumentException消息是「保留位数不能为负prefix-1, suffix2」方法序号2方法用途把手机号脱敏成「前 3 后 4」的展示形态客服列表、日志、对账单里放手机号直接用中间四位不落纸方法定义public static String mobile(String mobile)️入参解释public static String mobile(手机号)返回值解释String形如139****5678的脱敏手机号边界口径保留前 3 位与后 4 位中间按原长度打掩码总长度不变位数不足以满足「前 3 后 4」时输出全掩码它不校验是不是真手机号格式校验用ValidatorUtils.isMobilenull与空串原样返回方法示例mobile(13912345678)拿到139****5678mobile(139)长度不够拿到***mobile(null)拿到null方法序号3方法用途把身份证号脱敏成「前 6 位地区码 后 4 位」的形态出生日期整段刮掉工单、核验记录里贴证件号不再违规方法定义public static String idCard(String idCard)️入参解释public static String idCard(身份证号)返回值解释String18 位号出来形如110105********0019边界口径前 6 位地区码保留、后 4 位含末位校验码保留中间 8 位出生日期全部掩码长度不足以满足「前 6 后 4」时输出全掩码不做部分泄露不校验号码是否真实存在有效性判断用IdCardUtils方法示例idCard(110105198801010019)拿到110105********0019idCard(1101051988)只有 10 位拿到**********idCard(null)拿到null方法序号4方法用途把银行卡号脱敏成只留后 4 位支付流水与账单按行业惯例露卡尾前段一位都不给方法定义public static String bankCard(String bankCard)️入参解释public static String bankCard(银行卡号)返回值解释String形如***************0123的脱敏卡号边界口径前缀保留 0 位、只留后 4 位掩码长度随卡号长度变化连卡 BIN 都不暴露卡号只有 4 位或更短时全掩码不校验校验位有效性用CheckDigitUtils那套口径方法示例bankCard(6222021234567890123)拿到***************0123bankCard(0123)只有 4 位拿到****bankCard(null)拿到null方法序号5方法用途把中文姓名脱敏成「只留第 1 个字、其余掩码」的形态列表页显示张*、欧***这类效果名字部分不外泄方法定义public static String chineseName(String name)️入参解释public static String chineseName(中文姓名)返回值解释String首字保留、其余逐字掩码边界口径保留第 1 个字后面有几个字就出几个掩码长度信息仍在单字名整个变掩码一个字符都不留复姓同样只留首字要按复姓保留两位就自己传mask方法示例chineseName(欧阳小明)拿到欧***chineseName(张三)两字名拿到张*chineseName(欧)单字名拿到*chineseName(null)拿到null方法序号6方法用途把邮箱账号段掩码、与域名完整保留账号就是邮箱时展示成l*****example.com认得出公司又不暴露账号方法定义public static String email(String email)️入参解释public static String email(邮箱地址)返回值解释String账号首字符 掩码 完整域名边界口径账号段只留第 1 个字符掩码个数等于账号剩余长度账号只有一个字符时得到*example.com账号段为空example.com或整串没有时输出整串掩码不猜哪段是域名null原样返回方法示例email(li.leiexample.com)拿到l*****example.comemail(aexample.com)账号只有一个字符拿到*example.comemail(not-an-email)没有拿到************email(null)拿到null方法序号7方法用途把详细地址脱敏成「保留前 6 位、其余掩码」的形态快递单、订单列表里保留到区县级门牌栋号不进日志方法定义public static String address(String address)️入参解释public static String address(详细地址)返回值解释String前 6 个字符之后全部掩码边界口径默认保留 6 个字符够写到「省市区」这一级地址不足 6 位时输出全掩码不因为短就原样返回想改保留位数用方法8 的两参版方法示例address(北京市朝阳区望京街 10 号院 3 号楼 2 单元 501)拿到北京市朝阳区***********************只留到区级address(北京)比 6 位短拿到**address(null)拿到null方法序号8方法用途自己指定地址保留几位把脱敏粒度调到省、市或区展示场景要露更多或更少时不用为改一个位数再封一层方法定义public static String address(String address, int keep)️入参解释public static String address(详细地址, 保留位数)返回值解释String前keep位保留、其余掩码边界口径keep给 0 就是整串掩码掩码长度仍等于原长度keep为负抛IllegalArgumentException消息形如「保留位数不能为负prefix-3, suffix0」内部走的是mask与其它方法共用同一套码点对齐规则方法示例address(北京市朝阳区望京街 10 号院, 3)只留省级 3 位拿到北京市************address(北京市朝阳区望京街 10 号院 3 号楼 2 单元 501, 0)拿到*****************************长度没变address(上海市, -3)抛IllegalArgumentException消息带上「prefix-3, suffix0」方法序号9方法用途把口令字段固定输出 6 个掩码字符打印请求体或异常上下文时连长度都不泄露不给爆破留线索方法定义public static String password(String password)️入参解释public static String password(原始密码)返回值解释String恒为 6 个*边界口径不看原值长度也不看内容长口令短口令出来一样空串也得到 6 个掩码字符只有null按原样返回null它只用于展示与日志绝不能当加密或哈希用存口令走PasswordHashUtils方法示例password(S3cret!pw)拿到******password()空串也拿到******password(null)拿到null四、工具类源码可直接复制本工具类源码04-敏感信息脱敏工具类 需要「Java企业级工具类全家桶1-100」点点关注点点赞回复「java工具类」可领取100个工具类的完整源码 工具类已调试通过复制粘贴即可使用省时省力 可保存到自己网盘永久有效觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~
阅读完成 · 觉得有帮助?
咨询建站