JavaScript 实现敏感信息脱敏
JavaScript 实现敏感信息脱敏
一、银行卡号脱敏
要在 JavaScript 中对银行卡信息进行脱敏,可以使用字符串处理方法来替换敏感信息为特定的字符。以下是一个简单的示例代码,将银行卡号的中间数字用 "*" 替换:
function desensitizeCardNumber(cardNumber) {
// 获取银行卡号长度
const length = cardNumber.length;
// 如果银行卡号长度小于等于4,则无需脱敏,直接返回原始银行卡号
if (length <= 4) {
return cardNumber;
}
// 取出前四位
const firstTwo = cardNumber.substring(0, 2);
// 取出后四位
const lastFour = cardNumber.substring(length - 4);
// 构造脱敏字符串,中间的数字用 "*" 替换
const middle = "*".repeat(length - 6);
// 组合成脱敏后的银行卡号
const desensitizedCardNumber = firstTwo + middle + lastFour;
return desensitizedCardNumber;
}
// 测试
const cardNumber = "1234567890123456";
const desensitizedNumber = desensitizeCardNumber(cardNumber);
console.log(desensitizedNumber); // 输出: "12**********3456"
通过正则表达式的捕获组来实现
假设有一个任意长度的银行卡号,仅显示前四位和后四位,中间部分用星号替换。
// 支持任意长度的银行卡号,隐藏中间部分,仅显示前四位和后四位
function maskBankCardNumber(cardNumber) {
// 正则表达式,捕获银行卡号的前四位和后四位
const regex = /^(\d{4})(\d+)(\d{4})$/;
// 使用捕获组并进行替换
return cardNumber.replace(regex, (match, p1, p2, p3) => {
return `${p1}${"*".repeat(p2.length)}${p3}`;
});
}
const originalCardNumber = "123456781234567890";
const maskedCardNumber = maskBankCardNumber(originalCardNumber);
console.log(maskedCardNumber); // 输出:1234**********7890
正则表达式 ^(\d{4})(\d+)(\d{4})$
用于匹配银行卡号,其中 \d{4}
表示匹配前四位和后四位数字,\d+
表示匹配中间的任意长度的数字。replace
方法使用捕获组 p1
、p2
和 p3
,将中间的部分替换为相应数量的星号。
二、姓名脱敏
要在 JavaScript 中对姓名进行脱敏,可以根据实际需求采取不同的脱敏策略。以下是一个简单的示例代码,将姓名的后几个字符替换为 "*":
function desensitizeName(name) {
// 获取姓名长度
const length = name.length;
// 如果姓名长度小于等于1,则无需脱敏,直接返回原始姓名
if (length <= 1) {
return name;
}
// 取出第一个字符
const firstChar = name.substring(0, 1);
// 构造脱敏字符串,除了第一个字符外,其余字符都用 "*" 替换
const desensitizedPart = "*".repeat(length - 1);
// 组合成脱敏后的姓名
const desensitizedName = firstChar + desensitizedPart;
return desensitizedName;
}
// 测试
const name = "张三";
const desensitizedName = desensitizeName(name);
console.log(desensitizedName); // 输出: "张*"
通过正则表达式的捕获组来实现
以 张三
的中文姓名为例,只显示姓氏,名用星号替换。
function maskChineseName(name) {
// 正则表达式,捕获姓和名
const regex = /^(.)(.+)$/;
// 使用捕获组并进行替换
return name.replace(regex, (match, p1, p2) => {
return `${p1}${"*".repeat(p2.length)}`;
});
}
const originalName = "张三";
const maskedName = maskChineseName(originalName);
console.log(maskedName); // 输出:张*
正则表达式 ^(.)(.+)$
用于匹配姓名,其中 .
表示匹配一个字符,(.+)
表示匹配一个或多个字符。replace
方法使用捕获组 p1
和 p2
,将名用星号替换。
三、手机号脱敏
要在 JavaScript 中对手机号进行脱敏,可以根据实际需求采取不同的脱敏策略。以下是一个简单的示例代码,将手机号的中间四位用 "*" 替换:
function desensitizePhoneNumber(phoneNumber) {
// 获取手机号长度
const length = phoneNumber.length;
// 如果手机号长度小于等于7,则无需脱敏,直接返回原始手机号
if (length <= 7) {
return phoneNumber;
}
// 取出前三位
const firstThree = phoneNumber.substring(0, 3);
// 取出后四位
const lastFour = phoneNumber.substring(length - 4);
// 构造脱敏字符串,中间四位用 "*" 替换
const middle = "*".repeat(length - 7);
// 组合成脱敏后的手机号
const desensitizedPhoneNumber = firstThree + middle + lastFour;
return desensitizedPhoneNumber;
}
// 测试
const phoneNumber = "13812345678";
const desensitizedPhoneNumber = desensitizePhoneNumber(phoneNumber);
console.log(desensitizedPhoneNumber); // 输出: "138****5678"
通过正则表达式的捕获组来实现
假设有一个格式为 123-4567-8901
的电话号码,将中间的几位数字替换为星号 *
。
function maskPhoneNumber(phoneNumber) {
// 正则表达式,捕获电话号码的三个部分
const regex = /(\d{3})-(\d{4})-(\d{4})/;
// 使用捕获组并进行替换
return phoneNumber.replace(regex, (match, p1, p2, p3) => {
return `${p1}-****-${p3}`;
});
}
const originalNumber = "123-4567-8901";
const maskedNumber = maskPhoneNumber(originalNumber);
console.log(maskedNumber); // 输出:123-****-8901
正则表达式 (\d{3})-(\d{4})-(\d{4})
用于匹配电话号码,其中 \d{3}
表示匹配三个数字,-
表示匹配连字符。 replace
方法使用捕获组 p1
、p2
和 p3
,将中间的四位数字替换为星号 ****
。