credit-card-type:基于 CommonJS 的信用卡类型检测工具项目

A library for determining credit card type

分支4Tags34
文件最后提交记录最后更新时间
15 天前
2 个月前
2 天前
2 个月前
11 年前
6 年前
2 个月前
5 年前
6 个月前
5 年前
2 天前
15 天前
8 年前
2 天前
2 个月前
2 个月前
2 天前
2 天前
5 年前

Credit Card Type Build Status npm version

Credit Card Type 提供了一个实用的工具方法,可通过完整卡号或部分卡号来判断信用卡类型。它并非验证库,而是一个较小的组件,用于帮助您构建自己的验证或 UI 库。

该库专为输入时实时检测(支持部分卡号)而设计,采用 CommonJS 编写,因此您可以在 Node、io.js 和 浏览器 中使用。

下载

如需通过 npm 安装:

npm install credit-card-type

示例

var creditCardType = require("credit-card-type");

// The card number provided should be normalized prior to usage here.
var visaCards = creditCardType("4111");
console.log(visaCards[0].type); // 'visa'

var ambiguousCards = creditCardType("6");
console.log(ambiguousCards.length); // 6
console.log(ambiguousCards[0].niceType); // 'Discover'
console.log(ambiguousCards[1].niceType); // 'UnionPay'
console.log(ambiguousCards[2].niceType); // 'Maestro'

API

creditCardType(number: String)

creditCardType 会返回一个对象数组,每个对象包含以下数据:

键名 类型 描述
niceType String 卡片品牌的易读表示形式。
- Visa
- Mastercard
- American Express
- Diners Club
- Discover
- JCB
- UnionPay
- Maestro
- Mir
- Elo
- Hiper
- Hipercard
- Verve
- Naranja
- Troy
type String 卡片品牌的代码友好表示形式(适用于 CSS 中的类名)。可能的值列表请参考下文的卡片类型“常量”。
- visa
- mastercard
- american-express
- diners-club
- discover
- jcb
- unionpay
- maestro
- mir
- elo
- hiper
- hipercard
- verve
- naranja
- troy
gaps Array 卡片号码字符串表示形式中间隔的预期索引位置。例如,Visa 卡 4111 1111 1111 1111 在第 4、8 和 12 位有预期的空格。这对于设置自定义格式规则很有用。
lengths Array 卡片号码的预期长度数组(不包含空格和 / 字符)。
code Object 已确定卡片的安全码相关信息。了解更多关于代码对象的内容,请见下文。

如果未找到任何卡片类型,则返回空数组。

注意:提供的卡号应提前进行标准化处理。卡号字符串不应包含任何非整数值(例如,不包含字母或特殊字符)。

creditCardType.getTypeInfo(type: String)

getTypeInfo 会返回一个与指定 type 对应的单一对象(结构与 creditCardType 相同),如果指定的 type 无效或未知,则返回 undefined。

卡类型“常量”

为每种支持的卡类型提供了命名变量:

  • AMERICAN_EXPRESS
  • DINERS_CLUB
  • DISCOVER
  • ELO
  • HIPERCARD
  • HIPER
  • JCB
  • MAESTRO
  • MASTERCARD
  • MIR
  • UNIONPAY
  • VISA
  • VERVE
  • NARANJA
  • TROY

code

不同的卡品牌对其安全码有不同的命名方式,长度也各不相同。

品牌 名称 长度
Visa CVV 3
Mastercard CVC 3
American Express CID 4
Diners Club CVV 3
Discover CID 3
JCB CVV 3
UnionPay CVN 3
Maestro CVC 3
Mir CVP2 3
Elo CVE 3
Hiper CVC 3
Hipercard CVC 4
Verve CVV 3
Naranja CVV 3
Troy CVV 3

Visa 卡的完整响应如下所示:

{
  "niceType": "Visa",
  "type": "visa",
  "gaps": [4, 8, 12],
  "lengths": [16],
  "code": { "name": "CVV", "size": 3 }
}

高级用法

CommonJS:

var creditCardType = require("credit-card-type");
var getTypeInfo = require("credit-card-type").getTypeInfo;
var CardType = require("credit-card-type").types;

ES6:

import creditCardType, {
  getTypeInfo,
  types as CardType,
} from "credit-card-type";

筛选

creditCardType(cardNumber).filter(function (card) {
  return card.type === CardType.MASTERCARD || card.type === CardType.VISA;
});

模式检测

每种卡类型都有一个 patterns 属性,该属性是一个包含数字和数字范围(由两个值组成的数组表示,即最小值和最大值)的数组。

如果模式是一个数字,模块会将其与卡号进行比较。对于长度短于模式的卡号,部分匹配也视为匹配。例如,给定模式 123,则卡号 1121231234 均会匹配,而 213124 则不会。

如果模式是一个数字数组,则会检查卡号是否在这些数字的范围内。同样,也接受部分匹配。例如,给定范围 [100, 123],则卡号 11010012120123 均会匹配,而 213124 则不会。

在检测时,模块会遍历每种卡类型的 patterns 数组,若发生匹配,则将该卡类型添加到结果数组中。

当出现多个匹配时,如果完整匹配了某个模式,则优先选择具有更强模式的卡类型。例如,Visa 卡匹配任何以 4 开头的卡号,但有些 Elo 卡也以 4 开头。401178 就是一个例子。因此,对于卡号 440401401140117,模块会报告该卡可能是 Visa 卡或 Elo 卡。一旦卡号变为 401178,模块会识别出与 Elo BIN 的完全匹配,此时模块会报告该卡只能是 Elo 卡。

添加卡类型

您可以使用 addCard 添加模块不支持的其他卡品牌。传入配置对象即可。

creditCardType.addCard({
  niceType: "NewCard",
  type: "new-card",
  patterns: [2345, 2376],
  gaps: [4, 8, 12],
  lengths: [16],
  code: {
    name: "CVV",
    size: 3,
  },
});

如果添加的卡片已存在于模块中,它将覆盖原有卡片。

creditCardType.addCard({
  niceType: "Visa with Custom Nice Type",
  type: creditCardType.types.VISA,
  patterns: [41111, [44, 47]],
  gaps: [4, 8, 12],
  lengths: [13, 16, 19], // add support for old, deprecated 13 digit visas
  code: {
    name: "CVV",
    size: 3,
  },
});

添加新卡会将它们置于测试优先级的底部。优先级由数组决定。默认情况下,优先级如下:

[
  creditCardType.types.VISA,
  creditCardType.types.MASTERCARD,
  creditCardType.types.AMERICAN_EXPRESS,
  creditCardType.types.DINERS_CLUB,
  creditCardType.types.DISCOVER,
  creditCardType.types.TROY,
  creditCardType.types.JCB,
  creditCardType.types.UNIONPAY,
  creditCardType.types.NARANJA,
  creditCardType.types.VERVE,
  creditCardType.types.MAESTRO,
  creditCardType.types.ELO,
  creditCardType.types.MIR,
  creditCardType.types.HIPER,
  creditCardType.types.HIPERCARD,
];

您可以使用 changeOrder 调整顺序。作为第二个参数传入的数字表示卡片在数组中的插入位置。越靠近数组开头,优先级越高。

creditCardType.changeOrder("my-new-card", 0); // give custom card type the highest priority
creditCardType.changeOrder("my-new-card", 3); // give it a priority at position 3 in the test order array

你也可以使用 removeCard 删除卡片。

creditCardType.removeCard(creditCardType.types.VISA);

如果您需要重置已创建的修改,只需调用 resetModifications

creditCardType.resetModifications();

更新卡类型

您可以使用 updateCard 更新卡。传入卡类型和配置对象。任何未指定的属性都将从原始卡对象继承。

creditCardType.updateCard(creditCardType.types.VISA, {
  niceType: "Fancy Visa",
  lengths: [11, 16],
});

var visa = creditCardType.getTypeInfo(creditCardType.types.VISA);

// overwritten properties
visa.niceType; // 'Fancy Visa'
visa.length; // [11, 16]

// unchanged properties
visa.gaps; // [4, 8, 12]
visa.code.name; // 'CVV'

如果您需要重置已创建的修改,只需调用 resetModifications

creditCardType.resetModifications();

美观的卡号格式

function prettyCardNumber(cardNumber, cardType) {
  var card = getTypeInfo(cardType);

  if (card) {
    var offsets = [].concat(0, card.gaps, cardNumber.length);
    var components = [];

    for (var i = 0; offsets[i] < cardNumber.length; i++) {
      var start = offsets[i];
      var end = Math.min(offsets[i + 1], cardNumber.length);
      components.push(cardNumber.substring(start, end));
    }

    return components.join(" ");
  }

  return cardNumber;
}

prettyCardNumber("xxxxxxxxxx343", CardType.AMERICAN_EXPRESS); // 'xxxx xxxxxx 343'

开发

我们使用 nvm 来管理 node 版本,但你并非必须使用。请将下方所有 nvm 相关引用替换为你选择的工具。

nvm install
npm install

执行 npm install 时将安装所有测试依赖项,测试套件可通过 npm test 执行。

项目介绍

用于识别信用卡类型的库【此简介由AI生成】

定制我的领域
781.04 K155访问 GitHub