前言
在当今数字化时代,个人信息的安全与隐私保护已成为公众关注的焦点。本文将通过javascript代码示例,演示如何对手机号、身份证号、姓名、邮箱等个人数据进行脱敏处理。确保满足需求的同时保护用户的隐私。
一、手机号
手机号脱敏通常保留前三位和后四位,中间四位用星号替换。通过正则表达式匹配手机号的结构,并使用分组捕获前三位和后四位,中间四位替换为星号。
phonehide(phone) {
let reg = /^(1[3-9][0-9])\d{4}(\d{4}$)/; // 定义手机号正则表达式
phone = phone.replace(reg, '$1****$2');
return phone;
}使用正则表达式对手机号进行脱敏
二、身份证号
对身份证号进行脱敏通常意味着保留身份证号的前几位和后几位,而将中间的部分替换为星号。
function desensitizeidcard(idcard) {
if (!idcard || idcard.length < 6) {
console.error('请输入有效的身份证号码');
return '';
}
// 中国大陆的身份证号码长度为18位
const idlength = 18;
// 保留前6位和后4位,中间替换为星号
const prefix = idcard.substr(0, 6);
const suffix = idcard.substr(idlength - 4);
const middle = '*'.repeat(idlength - 10);
return prefix + middle + suffix;
}
// 示例
console.log(desensitizeidcard('123456199001010012')); // 输出: 123456*********0012三、姓名
对姓名数据进行脱敏通常意味着将姓名的一部分替换为星号(*)或其他占位符,以保护个人隐私。
function desensitizename(name, options) {
// 默认脱敏选项
const defaultoptions = {
showfirstletter: true, // 是否显示第一个字母
starlength: 3 // 脱敏字符的长度
};
// 合并用户选项和默认选项
const settings = {...defaultoptions, ...options};
// 检查是否是中文姓名
const ischinesename = /[\u4e00-\u9fa5]/.test(name);
// 脱敏函数
const desensitize = (str) => {
const firstletter = str[0];
const restlength = str.length - 1;
const stars = settings.showfirstletter ? '*'.repeat(restlength) : '*'.repeat(str.length);
return firstletter + stars;
};
if (ischinesename) {
// 假设中文姓名由两个或三个字组成
return desensitize(name);
} else {
// 英文姓名可能由多个单词组成
const parts = name.split(' ');
const desensitizedparts = parts.map(part => desensitize(part));
return desensitizedparts.join(' ');
}
}
// 示例
console.log(desensitizename('张三', { showfirstletter: true, starlength: 2 })); // 输出: 张**
console.log(desensitizename('李四', { showfirstletter: false })); // 输出: ***
console.log(desensitizename('john doe', { showfirstletter: true, starlength: 2 })); // 输出: j*** d** 此函数接受一个姓名字符串和一个选项对象。选项对象可以包含两个属性:showfirstletter决定是否显示姓名的第一个字母,starlength决定脱敏后显示的星号数量。函数会根据这些选项对中文或英文姓名进行脱敏处理。
请注意,这个函数假设中文姓名由两个或三个汉字组成,而英文姓名由空格分隔的多个单词组成。如果姓名结构更复杂,可能需要进一步定制函数以适应不同的脱敏需求。
四、邮箱
对邮箱进行脱敏通常意味着保留邮箱的第一部分(即用户名部分)和域名部分,而将用户名的中间部分替换为星号(*)。
function desensitizeemail(email) {
if (!email || !email.includes('@')) {
console.error('请输入有效的邮箱地址');
return '';
}
// 分离邮箱的用户名部分和域名部分
const [username, domain] = email.split('@');
// 确定用户名部分脱敏后的长度,这里保留前后各2个字符
const visiblelength = 2;
// 如果用户名长度小于或等于保留长度,则不进行脱敏
if (username.length <= visiblelength * 2) {
return email;
}
// 脱敏用户名部分,中间用星号替换
const visibleusername = username.substring(0, visiblelength) + '*'.repeat(username.length - visiblelength * 2) + username.substring(username.length - visiblelength);
// 重新组合脱敏后的邮箱
return visibleusername + '@' + domain;
}
// 示例
console.log(desensitizeemail('example@email.com')); // 输出: e*****m@email.com
console.log(desensitizeemail('user123@domain.com')); // 输出: u*****3@domain.com
console.log(desensitizeemail('test@website.org')); // 输出: t****e@website.org 此函数接受一个邮箱字符串作为参数,首先检查输入是否有效(即是否包含@符号)。然后,它将邮箱地址分割为用户名部分和域名部分。如果用户名部分的长度小于或等于保留长度(在这个例子中是前后各2个字符),则不会进行脱敏。否则,它将用户名的中间部分替换为星号。
请注意,这个函数默认保留了前后各2个字符,但你可以根据需要调整visiblelength的值。此外,如果邮箱地址很短,函数会直接返回原邮箱地址,不进行脱敏。
总结
到此这篇关于前端实现个人信息脱敏(手机号、身份证号、姓名、邮箱)的文章就介绍到这了,更多相关前端个人信息脱敏内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论