# 证件校验

仅供参考:
类型 描述 国家
CPF 税号(个人) Brazil
CNPJ 联邦税务识别号码(法人) Brazil
RUT 税号 Chile (7-9 digits)
DNI 身份证 Peru and Argentina (8 digits)
CI 身份证 Ecuador (8-10 digits)
CE 外国居民卡 Peru (8-10 digits)
PP 护照 Chile (9-10 digits) Ecuador (only for Cash)(9-10 digits)
RUC 税号 Peru and Ecuador (9-10 digits)
PAS 护照 Peru (9-10 digits)Ecuador (only for BankTransfer)(9-10 digits)
CURP 唯一人口登记代码 Mexico (18 digits)
RFC 联邦纳税人登记代码 Mexico (12~13 digits)
CIP 身份证 Panama (6 digits)
DPI 身份证 Guatemala (9 digits)
CDI 身份证 Costa Rica (9 digits)
区域 证件类型 长度 正则 样例
Brazil CPF;CNPJ 11/14 github
Argentina CUIT;CUIL;CDI 11 digits ^(20|23|24|25|26|27|30|33|34)-?\d{2}[.]?\d{3}[.]?\d{3}-?\d$ 20115872045; 27-32548697-5; 30-31.145.201-7
Uruguay CI 8 digits ^[0-9]{1}[.]?[0-9]{0,3}[.]?[0-9]{3}[-]?[0-9]{1}$ 8.741.777-1; 26669058
Uruguay RUT 12 digits ^[0-9]{2}-?[0-9]{6}-?[0-9]{3}-?[0-9]{1}$ 21-100342-001-7; 211003420017; 080101220012
Ecuador CI 8-10 digits ^\d.?\d{3}.?\d{3}-?\d$ 1004922993
Ecuador CE 10 digits ^([0-1][0-9]|2[0-4])[0-5]\d{6}(\-)?[0-9]$ 0603027988
Ecuador RUC 13 digits [0-9]{13} 1391727259001
Peru DNI 8 digits ^[\d]{1,3}.?[\d]{3,3}.?[\d]{3,3}$ 30784589
Peru RUC 11 digits [0-9]{11} 20538995364
Colombia CC 6~10 digits ^[0-9]{0,1}[.]?[0-9]{0,3}[.]?[0-9]{3}[.]?[0-9]{3}$ 487245
Colombia NIT 10 digits ^[0-9]{3}[.]?[0-9]{3}[.]?[0-9]{3}-?[0-9]$ 9014586527
Colombia CE up to 12 ^[a-zA-Z0-9]{5,12}$ A20106607 7001115243
Bolivia CI 7~9 It is formed with 7 mandatory numerical digits and then optionally a space and two letters. The two letters represent the departments belonging to the “ Plurinational State of Bolivia”. E.g. BE, CB, CH, LP, OR, PD, PT, SC, TJ. e.g. “SC 1234567”, “1234567”, “SC1234567”, “1234567SC” or “1234567 SC” SC 1234567, 1234567,SC1234567,1234567SC,1234567 SC
Bolivia CE 8
Bolivia NIT 9~12 123456789
Paraguay CI 7 digits 1234567
Paraguay RUC 8~9 digits 12345678

# 证件规则校验JavaScript库

证件格式化、合规校验,可以使用Luxpag JS库 luxpagSDK.min.js库

# 集成步骤

# 1. 引用 luxpagSDK.min.js 到您的支付页面

<script src="https://res.luxpag.com/lib/js/luxpagSDK.min.js"></script>

# 2. 相关方法

方法名称 参数 参数2 返回 描述
formatId(value, code) string 证件号 string,ISO 3166, 3位国家代码:MEX、CHL、COL、PER、 ECU、BRA、PAN、CRI、SLV、GTM、NIC string 可格式化的证件: CPF/CNPJ, RFC, NIT/CC、RUT/RUN、DNI/RUC、RUC、CIP、DUI、DPI
validateId(value, code) string 证件号 string,ISO 3166, 3位国家代码:MEX、CHL、COL、PER、ECU、BRA、PAN、CRI、SLV、GTM、NIC (list) [isIdvalid (boolean), idType (string) ] 可校验的证件: CPF/CNPJ、RFC、NIT/CC、RUT/RUN、DNI/RUC、RUC、CIP、DUI、DPI
validateName(value) string - (boolean) true/false 要验证的名称,只能用于:MEX、CHL、COL、PER、ECU、BRA、PAN、CRI、SLV、GTM、NIC
validateEmail(value) string - (boolean) true/false 验证电子邮件/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/g
formatCEP(value) string - string 格式化 CEP (邮编)
validateCEP(value) string - (boolean) true/false 验证的邮编
clearData(value) string - string 清除不必要的字符而清除的数据 (-/.).
formatPostalCode(valu e, code) string 邮编 string,ISO 3166, 3位国家代码 (MEX, CHL, COL, PER, BRA) string 格式化 CEP (邮编).
validatePostalCode(val ue, code) string 邮编 string,ISO 3166, 3位国家代码 (MEX, CHL, COL, PER, BRA) string 验证 CEP (邮编) .
validateMobilePhone(value, code) string 电话 string,ISO 3166, 2位国家代码 (MX, CL, CO, PE, BR etc.) (boolean) true/false (string) error message 验证电话

# 3. 样例

https://res.luxpag.com/lib/sdkExample.html

luxpagSDK.formatId("50284414727","BRA") // 502.844.147-27
luxpagSDK.validateId("502.844.147-27", "BRA") // [true, 'CPF']
luxpagSDK.clearData("502.844.147-27") // 50284414727
luxpagSDK.validateMobilePhone("75991435892", "BR");// [true]

样例:

<script type="text/javascript" src="https://res.luxpag.com/lib/js/jquery-1.10.2.min.js"></script> 
<script type="text/javascript" src="https://res.luxpag.com/lib/js/luxpagSDK.min.js"></script>

    <label for="">RFC: </label>
    <input type="text" id="input-rfc" /> <button id="submit-mx-id">Submit RFC</button>
    <br />

    <br />
    <label for="">CPF/CNPJ: </label>
    <input type="text" id="input-br-id" /> <button id="submit-br-id">Submit CPF/CNPJ</button>
    <br />

    <br />
    <label for="">CEP: </label>
    <input type="text" id="input-cep" /> <button id="submit-cep">Submit CEP</button>
    <br />

    <br />
    <label for="">Postal code: </label>
    <select id="countries">
      <option value="BRA">Brasil</option>
      <option value="MEX">Mexico</option>
      <option value="CHL">Chile</option>
      <option value="COL">Colombia</option>
      <option value="PER">Peru</option>
    </select>
    <input type="text" id="input-postal-code" /> <button id="submit-postal-code">Submit Postal Code</button>
    <br />

    <script type="87f1b3200af765c0f2113510-text/javascript" charset="utf-8">
      $("#input-rfc").on("input", (e) => {
        const value = e.target.value;
        const idNode = $("#input-rfc");

        const formattedId = luxpagSDK.formatId(value, "MEX");
        idNode.val(formattedId);

        const [isIdvalid, idType] = luxpagSDK.validateId(idNode.val(), "MEX");

        if (isIdvalid === true) {
          idNode.removeClass("error");
        } else {
          idNode.addClass("error");
        }
      });
      $("#submit-mx-id").click(() => {
        const idNode = $("#input-rfc");
        const [isIdvalid, idType] = luxpagSDK.validateId(idNode.val(), "MEX");
        if (isIdvalid === true) {
          const requestData = {
            customer: {
              identify: {
                number: luxpagSDK.clearData(idNode.val()),
                type: idType,
              }, // .....
            },
          };

          window.alert(JSON.stringify(requestData));
        }
      });

      $("#input-br-id").on("input", (e) => {
        const value = e.target.value;
        const idNode = $("#input-br-id");

        const formattedId = luxpagSDK.formatId(value, "BRA");
        idNode.val(formattedId);

        const [isIdvalid, idType] = luxpagSDK.validateId(idNode.val(), "BRA");
        if (isIdvalid === true) {
          idNode.removeClass("error");
        } else {
          idNode.addClass("error");
        }
      });
      $("#submit-br-id").click(() => {
        const idNode = $("#input-br-id");
        const [isIdvalid, idType] = luxpagSDK.validateId(idNode.val(), "BRA");
        if (isIdvalid === true) {
          const requestData = {
            customer: {
              identify: {
                number: luxpagSDK.clearData(idNode.val()),
                type: idType,
              }, // .....
            },
          };

          window.alert(JSON.stringify(requestData));
        }
      });

      $("#input-cep").on("input", (e) => {
        const value = e.target.value;
        const cepNode = $("#input-cep");

        const formattedCep = luxpagSDK.formatCEP(value);
        cepNode.val(formattedCep);

        const isCepValid = luxpagSDK.validateCEP(cepNode.val());
        if (isCepValid === true) {
          cepNode.removeClass("error");
        } else {
          cepNode.addClass("error");
        }
      });
      $("#submit-cep").click(() => {
        const cepNode = $("#input-cep");
        const isCepValid = luxpagSDK.validateCEP(cepNode.val());
        if (isCepValid === true) {
          const requestData = {
            customer: {
              address: {
                zip_code: luxpagSDK.clearData(cepNode.val()),
              },
            },
          };

          window.alert(JSON.stringify(requestData));
        }
      });

      $("#input-postal-code").on("input", (e) => {
        const value = e.target.value;
        const postalCodeNode = $("#input-postal-code");
        const countryCodeNode = $("#countries");
        const formattedPostalCode = luxpagSDK.formatPostalCode(value, countryCodeNode.val());
        postalCodeNode.val(formattedPostalCode);
        console.log("formattedPostalCode", formattedPostalCode);

        const isPostalCodeValid = luxpagSDK.validatePostalCode(postalCodeNode.val(), countryCodeNode.val());
        console.log("isPostalCodeValid", isPostalCodeValid);
        if (isPostalCodeValid === true) {
          postalCodeNode.removeClass("error");
        } else {
          postalCodeNode.addClass("error");
        }
      });

      $("#submit-postal-code").click(() => {
        const countryCodeNode = $("#countries");
        const postalCodeNode = $("#input-postal-code");
        const isPostalCodeValid = luxpagSDK.validatePostalCode(postalCodeNode.val(), countryCodeNode.val());
        if (isPostalCodeValid === true) {
          const requestData = {
            customer: {
              address: {
                zip_code: luxpagSDK.clearData(postalCodeNode.val()),
              },
            },
          };

          window.alert(JSON.stringify(requestData));
        }
      });

      $("#countries").change((e) => {
        countryCode = e.target.value;
        const postalCodeNode = $("#input-postal-code");
        const isPostalCodeValid = luxpagSDK.validatePostalCode(postalCodeNode.val(), countryCode);
        if (isPostalCodeValid === true) {
          postalCodeNode.removeClass("error");
        } else {
          postalCodeNode.addClass("error");
        }
      });
    </script>