前端实现个人信息脱敏(手机号、身份证号、姓名、邮箱)示例

[复制链接]
发表于 2026-1-2 21:22:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前端实现个人信息脱敏(手机号、身份证号、姓名、邮箱)示例

在当今数字化期间,个人信息的安全与隐私掩护已成为公众关注的焦点。本文将通过JavaScript代码示例,演示怎样对手机号、身份证号、姓名、邮箱等个人数据举行脱敏处置处罚。确保满意需求的同时掩护用户的隐私。
一、手机号

手机号脱敏通常生存前三位和后四位,中央四位用星号更换。通过正则表达式匹配手机号的布局,并使用分组捕捉前三位和后四位,中央四位更换为星号。
  1. phoneHide(phone) {
  2.         let reg = /^(1[3-9][0-9])\d{4}(\d{4}$)/; // 定义手机号正则表达式
  3.         phone = phone.replace(reg, '$1****$2');
  4.         return phone;
  5. }
复制代码
使用正则表达式对手机号举行脱敏 
二、身份证号

对身份证号举行脱敏通常意味着生存身份证号的前几位和后几位,而将中央的部门更换为星号。
  1. function desensitizeIDCard(idCard) {
  2.   if (!idCard || idCard.length < 6) {
  3.     console.error('请输入有效的身份证号码');
  4.     return '';
  5.   }
  6.   // 中国大陆的身份证号码长度为18位
  7.   const idLength = 18;
  8.   // 保留前6位和后4位,中间替换为星号
  9.   const prefix = idCard.substr(0, 6);
  10.   const suffix = idCard.substr(idLength - 4);
  11.   const middle = '*'.repeat(idLength - 10);
  12.   return prefix + middle + suffix;
  13. }
  14. // 示例
  15. console.log(desensitizeIDCard('123456199001010012')); // 输出: 123456*********0012
复制代码
三、姓名

对姓名数据举行脱敏通常意味着将姓名的一部门更换为星号(*)或其他占位符,以掩护个人隐私。
  1. function desensitizeName(name, options) {
  2.   // 默认脱敏选项
  3.   const defaultOptions = {
  4.     showFirstLetter: true,  // 是否显示第一个字母
  5.     starLength: 3           // 脱敏字符的长度
  6.   };
  7.   // 合并用户选项和默认选项
  8.   const settings = {...defaultOptions, ...options};
  9.   // 检查是否是中文姓名
  10.   const isChineseName = /[\u4e00-\u9fa5]/.test(name);
  11.   // 脱敏函数
  12.   const desensitize = (str) => {
  13.     const firstLetter = str[0];
  14.     const restLength = str.length - 1;
  15.     const stars = settings.showFirstLetter ? '*'.repeat(restLength) : '*'.repeat(str.length);
  16.     return firstLetter + stars;
  17.   };
  18.   if (isChineseName) {
  19.     // 假设中文姓名由两个或三个字组成
  20.     return desensitize(name);
  21.   } else {
  22.     // 英文姓名可能由多个单词组成
  23.     const parts = name.split(' ');
  24.     const desensitizedParts = parts.map(part => desensitize(part));
  25.     return desensitizedParts.join(' ');
  26.   }
  27. }
  28. // 示例
  29. console.log(desensitizeName('张三', { showFirstLetter: true, starLength: 2 })); // 输出: 张**
  30. console.log(desensitizeName('李四', { showFirstLetter: false })); // 输出: ***
  31. console.log(desensitizeName('John Doe', { showFirstLetter: true, starLength: 2 })); // 输出: J*** D**
复制代码
  此函数担当一个姓名字符串和一个选项对象。选项对象可以包罗两个属性:showFirstLetter决定是否表现姓名的第一个字母,starLength决定脱敏后表现的星号数目。函数会根据这些选项对中文或英文姓名举行脱敏处置处罚。
  请留意,这个函数假设中文姓名由两个或三个汉字构成,而英文姓名由空格分隔的多个单词构成。如果姓名布局更复杂,大概须要进一步定制函数以顺应差别的脱敏需求。
四、邮箱

对邮箱举行脱敏通常意味着生存邮箱的第一部门(即用户名部门)和域名部门,而将用户名的中央部门更换为星号(*)。
  1. function desensitizeEmail(email) {
  2.   if (!email || !email.includes('@')) {
  3.     console.error('请输入有效的邮箱地址');
  4.     return '';
  5.   }
  6.   // 分离邮箱的用户名部分和域名部分
  7.   const [username, domain] = email.split('@');
  8.   // 确定用户名部分脱敏后的长度,这里保留前后各2个字符
  9.   const visibleLength = 2;
  10.   // 如果用户名长度小于或等于保留长度,则不进行脱敏
  11.   if (username.length <= visibleLength * 2) {
  12.     return email;
  13.   }
  14.   // 脱敏用户名部分,中间用星号替换
  15.   const visibleUsername = username.substring(0, visibleLength) + '*'.repeat(username.length - visibleLength * 2) + username.substring(username.length - visibleLength);
  16.   // 重新组合脱敏后的邮箱
  17.   return visibleUsername + '@' + domain;
  18. }
  19. // 示例
  20. console.log(desensitizeEmail('[email protected]')); // 输出: e*****[email protected]
  21. console.log(desensitizeEmail('[email protected]')); // 输出: u*****[email protected]
  22. console.log(desensitizeEmail('[email protected]')); // 输出: t****[email protected]
复制代码
  此函数担当一个邮箱字符串作为参数,起首查抄输入是否有用(便是否包罗@符号)。然后,它将邮箱所在分割为用户名部门和域名部门。如果用户名部门的长度小于或便是生存长度(在这个例子中是前后各2个字符),则不会举行脱敏。否则,它将用户名的中央部门更换为星号。
  请留意,这个函数默认生存了前后各2个字符,但你可以根据须要调解visibleLength的值。别的,如果邮箱所在很短,函数会直接返回原邮箱所在,不举行脱敏。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表