NodeJS 在JavaScript中屏蔽信用卡的最佳方法是什么?

doinxwow  于 2023-04-11  发布在  Node.js
关注(0)|答案(7)|浏览(182)

在Node中,在渲染视图层之前,我需要将信用卡转换为如下所示:************1234
没有循环和丑陋是有一个实用程序或一个班轮为这?信用卡可以潜在地看这些方式之一:

1234567898765432
1234-5678-9876-5432
1234 5678 9876 5432
xxslljrj

xxslljrj1#

不需要正则表达式:

var cc='1234-5678-9012-3456';
var masked = '************'+cc.substr(-4); // ************3456

只要最后四个数字是连续的,就可以用于任何格式。

bkhjykvo

bkhjykvo2#

下面是使用Ramda和一些RegEx的一种方法:

var ensureOnlyNumbers  = R.replace(/[^0-9]+/g, '');
var maskAllButLastFour = R.replace(/[0-9](?=([0-9]{4}))/g, '*');
var hashedCardNumber   = R.compose(maskAllButLastFour, ensureOnlyNumbers);

hashedCardNumber('1234567898765432'); // ************5432

演示:http://jsfiddle.net/7odv6kfk/

y3bcpkx1

y3bcpkx13#

这是为那些说他们不需要另一种方法来掩盖信用卡的人准备的。这个解决方案将用星号附加卡号的最后4个字符。

var cardNumber       = '4761640026883566';
console.log(maskCard(cardNumber));

function maskCard(num) {
  return `${'*'.repeat(num.length - 4)}${cardNumber.substr(num.length - 4)}`;
}

jsfiddle example

zlhcx6iw

zlhcx6iw4#

我使用这个对我有用的函数,因为屏蔽信用卡号码并将其格式化为四个字符的块,如**** **** **** 1234,这里的解决方案:

const maskCreditCard = (card) => {
  return card
    .replace(/.(?=.{5})/g, "*")
    .match(/.{1,4}/g)
    .join(" ");
};
rpppsulh

rpppsulh5#

下面是使用Regex和lookahead的普通JavaScript

var cardNumbers = [
  "1234567898765432",
  "1234-5678-9876-5432",
  "1234 5678 9876 5432"
];

console.log(cardNumbers.map(maskCardNumber));
//> ["************5432", "************5432", "************5432"]

function maskCardNumber(cardNumber) {
  return cardNumber.replace(/^[\d-\s]+(?=\d{4})/, "************");
};

与AllienWebguy的实现不同:

  • 不需要外部库
  • 在一个replace()调用中完成所有操作
  • 用恒定数量的星号替换任意数量的数字(它应该快一点,但可能不是您想要的)
  • 仅支持描述的格式(例如,不适用于"1B2C3D4E5F6G7H89876-5432""1234+5678+9876=54-32"
brvekthn

brvekthn6#

function hashCreditCard(number){
  const str = String(number).replace(" ","").replace("-","")
  const last = str.slice(-4)
  return last.padStart(str.length,"*")
}

console.log(hashCreditCard(5859831060602434))
console.log(hashCreditCard("5859-8310-6060-2434"))
console.log(hashCreditCard("5859 8310 6060 2434"))
zdwk9cvp

zdwk9cvp7#

删除非数字,生成一个长度为-4的星号字符串,将最后4个字符追加到:

var masked = Array(cc.replace(/[^\d]/g, "").length - 3).join("*") + cc.substr(cc.length - 4);

或在掩码中包含空格/连字符:

var masked = Array(cc.length - 3).join("*") + cc.substr(cc.length - 4);

相关问题