【问题标题】:Credit card form html values length信用卡表单 html 值长度
【发布时间】:2015-11-27 00:38:55
【问题描述】:

我尝试了很多示例,但仍然找不到解决问题的好方法。

如果我使用文本字段,那么我的应用会裁剪最后 3 位数字并使交易无法进行。问题是因为用户可能会输入space

例如-

1234 1234 4564 1

当我在 (type="text") 上使用 JQuery 时,我过滤了字符,但我仍然遇到空间和裁剪问题。

知道如何以更好的方式解决这个问题吗?

我不太喜欢使用 JS 进行键映射,因为我不知道用户想要如何使用空间。

这是我的代码 -

<input class="required" id="field" type="number" min="0000" max="9999" pattern="[0-9]{4}"  size="4" name="cvv"/>

<div class="FormInput">
                    <input name="var_creditcard_no" type="number" id="var_creditcard_no" onkeypress="return Check_mobile_number(event)" maxlength="16" value="<?php echo set_value('var_creditcard_no', '') ?>" placeholder="Credit Card Number *">
                    <?php echo form_error('var_creditcard_no', '<label class="error">', '</label>') ?>
                </div>

这是 JQuery 代码 -

    $(function() {
      var txt = $("#myTextbox");
      var func = function() {
        txt.val(txt.val().replace(/\s/g, ''));
      }
      txt.keyup(func).blur(func);
    });

【问题讨论】:

  • .on('input', func) 是您的解决方案。
  • @thenchanter 将数据发送到支付网关并非非法形式。它谈论验证问题cus用户输入直接改变交易状态。
  • 存储信用卡信息是违法的,至少在我的国家是这样。为什么不直接使用支付网关?在发送数据之前,您将其存储在您的服务器中,如果您的服务器以某种方式被黑客入侵并且您的客户的信用卡信息被盗,您将入狱(在世界上任何发达国家)。
  • 您愿意使用插件吗?如果是的话,也许检查这个[链接]jqueryscript.net/form/…
  • @thenchanter PCI 说存储 pan 后 4 个数字对他们来说是可以的,你不能存储 Cvv 和 exp 日期和个人信息。我只存储 c 卡号的最后 4 位数字,因此更容易重新找到和验证用户。并且这个表格是直接发送到支付网关的。只有 cc number 用于开发票提议。但不用担心它不是 pci 问题,它是关于 html 5 错误

标签: javascript jquery html forms credit-card


【解决方案1】:

HTML 代码

cc number
<br/>
<input class="required" id="field" type="text" maxlength="16" onkeypress="return isNumberKey(event)" name="cc" />max 16
<br/>cvv
<br/>
<input class="required" id="field" type="text" maxlength="4" onkeypress="return isNumberKey(event)" name="cvv" />max 4

js代码

/* isNumberKey
    Only allows NUMBERS to be keyed into a text field.
    @environment ALL
    @param evt - The specified EVENT that happens on the element.
    @return True if number, false otherwise.
 Source:
 http://www.kk-design.com/DevCookbook/JavascriptLibrary/isnumberkey.html
*/
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    // Added to allow decimal, period, or delete
    if (charCode == 110 || charCode == 190 || charCode == 46) return true;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) return false;
    return true;
} // isNumberKey

Solution is here我个人不喜欢它,但它的工作。

但也许他们应该为信用卡添加新的 html 类型,我认为所有人都会使用它。

【讨论】:

    【解决方案2】:

    您可以使用 html5 模式来实现这一点。

    美国运通:

    [0-9]{4} *[0-9]{6} *[0-9]{5}
    

    信用卡

    [0-9]{13,16}
    

    大来俱乐部

    ^([30|36|38]{2})([0-9]{12})$
    

    就这样用吧,

    pattern="[0-9]{13,16}"
    

    【讨论】:

    • 我在小提琴上试了一下,效果不好
    【解决方案3】:

    var txt = '1234 1234 4564 1';
    txt = txt.replace(/\s/g,'');
    var valid = txt.match(/([0-9]{16})/g);
    if(valid){
         //submit form
    }

    通知

    存储信用卡信息不违法;但是,强烈建议您不要这样做,因为您可能会对发生的任何损害负责。

    首先,成为 PCI 兼容 https://www.pcisecuritystandards.org/documents/PCI_DSS_v3-1.pdf

    一旦您符合 PCI 标准,重要的是要了解哪些信息可以记录在您的系统中:

    • 完整的磁道数据(磁条数据或芯片上的等效数据)
    • CAV2/CVC2/CVV2/CID
    • PIN/PIN 块

    根据官方 PCI 合规性文档,以下信息不被认为是安全的:

    • 主帐号 (PAN)
    • 持卡人姓名
    • 有效期
    • 服务代码

    “主帐号是持卡人数据的定义因素。 如果存储了持卡人姓名、服务代码和/或到期日期, 用 PAN 处理或传输,或以其他方式存在于 持卡人数据环境,他们必须按照 适用的 PCI DSS 要求”

    PCI DSS 要求 3.3 和 3.4 仅适用于 PAN。如果存储了 PAN 对于持卡人数据的其他元素,只有 PAN 必须呈现 根据 PCI DSS 要求 3.4 不可读。

    【讨论】:

    • PCI 部分完美,但是你提供的 js 没有解决问题,它会重写空间,但不会解决 maxlenght=16 后丢失数字的问题
    • 好吧,你唯一能做的就是返回 false 并且不提交我想如果长度
    • 同意 :) 但我会坚持回来完成工作。
    猜你喜欢
    • 2017-02-24
    • 2012-02-15
    • 2020-11-08
    • 1970-01-01
    • 2020-04-06
    • 2011-02-14
    • 2017-08-05
    • 2012-03-29
    相关资源
    最近更新 更多