【问题标题】:Javascript to identify card numberJavascript识别卡号
【发布时间】:2013-08-01 19:38:53
【问题描述】:

我正在使用一段 JavaScript 代码来识别用户输入的信用卡号类型。我对 JavaScript 了解不多,并且正在使用在网络上找到的代码。我已经让它毫无问题地工作了,但我希望有人能向我解释为什么特定部分会以这种方式工作。

当用户开始输入信用卡号码时,JavaScript 函数使用的值与号码不同。例如,当我输入 3 时,charCode 变量为 51。我只是想了解如何从 3 得到 51,以便可以将此函数用于其他卡类型。

JAVASCRIPT:

<script type="text/javascript">
function handleKeypress(inCardNumber,e) {
    var inCardNumber = document.form.cardNumber;

    var charCode;
    if(e && e.which) {
        charCode = e.which; // For Firefox
    }
    else if(window.event){
        e = window.event;
        charCode = e.keyCode; // For IE
    }

    if (inCardNumber.value.length === 1) { 
        switch (charCode) {
        case (48):
            swapVISA.src = "/images/icons/payments/VISA-dim.png";   
            break;
        case (49):
            swapVISA.src = "/images/icons/payments/VISA-dim.png";
            break;


etc

HTML

onkeyup="handleKeypress(this,event);"

【问题讨论】:

    标签: javascript dom-events onkeyup


    【解决方案1】:

    请参阅this page 末尾的彩色表格以获取 ASCII id 列表。还有here too

    但我建议阅读所有页面。

    简要说明:

    您的键盘上的每个键都分配有一个 ASCII ID 的映射。 所以 Enter 是 13,Esc 是 27 等等。

    【讨论】:

      【解决方案2】:

      字符代码只是一个键的表示,它们只是一个代码对应什么击键的标准,所以不要想太多。请记住,键盘上的每个键都有一个与之关联的字符代码。

      以下是字符代码列表以及用于测试它们的交互式工具: http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

      正如 UweB 指出的,从这样的代码中获取实际字符:

      var theChar = String.fromCharCode(charCode);
      

      【讨论】:

      • 谢谢!现在对我来说更有意义了。所以事实证明这对我来说可能不是识别卡号的好方法,因为我需要查看多个数字。由于 switch/case 语句仅考虑第一个数字,因此 3(ASCII ID 51)可能是 Amex 或 Diners Club 卡的开头......我非常感谢大家的解释 - 谢谢!
      【解决方案3】:

      这是由于字符3ASCII 值(ASCII 是计算机广泛使用的数字表示各种常见字符的方式)。如果您查看该 Wikipedia 文章的 ASCII printable characters 部分,您会看到 字形(或字符)3Dec 值为 51 .您可以在同一张表中查看其他常见可打印字符的 dec 值。

      请记住,当您按下键盘上的 3 键时,计算机将看到 字符 3,而不是原始 整数 3 的值。该表的 Glyph 列表示字符值,Dec 列表示在 ASCII 方案中表示该字符的原始整数值。您还可以在该表中看到二进制表示,这是 Dec 整数值分解为计算机如何在最低级别实际处理该值的内容。

      在您的代码中,charCode 变量被分配了按键的 dec 值(通过 e.whiche.keyCode,其中 e 看起来是基本 JavaScript @987654323 @),其类型为Number。这就是代码后面的switchcharCode 与数值进行比较的原因。

      您可以使用 fromCharCode()charCodeAt() 函数在 JavaScript 中的字符及其 dec 值之间切换。

      【讨论】:

        【解决方案4】:

        值 51 是字符“3”的 Unicode(或 ASCII,如果这更容易理解)值。有关更多信息,请参阅此问题:JavaScript KeyCode vs CharCode

        所以换句话说,你没有在 charCode 中得到一个字符串对象。

        【讨论】:

          【解决方案5】:

          您将在活动中获得 ascii 字符代码。 您可以通过

          var theChar = String.fromCharCode(charCode);
          

          【讨论】:

          • 鉴于 OP 真的不理解或不知道 ASCII 是什么,虽然您的代码非常有用,但我认为至少有一个关于问题所在的链接和解释是合适的。在此基础上投了反对票。
          • 你怎么知道的?似乎用户知道不同浏览器中的不同事件模型,了解 ascii 或使用 google 并输入“ascii”并不是那么难 - 但我们开始了:google.com/search?q=ascii :-)
          猜你喜欢
          • 2011-08-20
          • 2013-05-24
          • 1970-01-01
          • 1970-01-01
          • 2011-02-17
          • 2019-06-24
          • 2016-03-03
          • 1970-01-01
          • 2016-12-19
          相关资源
          最近更新 更多