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 方法使用捕获组 p1p2p3,将中间的部分替换为相应数量的星号。

二、姓名脱敏

要在 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 方法使用捕获组 p1p2,将名用星号替换。

三、手机号脱敏

要在 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 方法使用捕获组 p1p2p3,将中间的四位数字替换为星号 ****

posted @ 2024-04-18 16:23  飞仔FeiZai  阅读(326)  评论(0编辑  收藏  举报