GST标识号(GSTIN)的正则表达式

时间:2017-06-08 09:29:24

标签: javascript regex

印度GST号码的正则表达是什么?您可以从https://cleartax.in/s/know-your-gstin了解有关GST数字的更多信息 在摘要级别,数字表示为

  • 列表项此号码的前两位数字代表根据印度人口普查2011
  • 的州代码
  • 接下来的十位数字将是纳税人的PAN号码
  • 将根据州内的注册数量分配第十三位数
  • 默认情况下,第十四位为Z
  • 最后一位数字用于支票代码

17 个答案:

答案 0 :(得分:24)

以下是GSTIN的正则表达式和校验和验证

\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}[Z]{1}[A-Z\d]{1}

enter image description here

格式详情

  1. 根据人口普查(2011年),商品及服务税编号的前2位数代表国家代码。
  2. 接下来的10位数字与纳税人的PAN号码相同。
    • 前五个将是字母
    • 接下来的四个将是数字
    • 最后一个是检查代码
  3. 第13位数字是您在一个州内注册的次数,即在9之后,A至Z被视为10至35.
  4. 默认情况下,第14位为Z.
  5. 最后一个是支票代码。
  6. 以下是使用js中的校验和验证/验证gstin编号的代码

    
    
    function checksum(g){
        let a=65,b=55,c=36;
        return Array['from'](g).reduce((i,j,k,g)=>{ 
        p=(p=(j.charCodeAt(0)<a?parseInt(j):j.charCodeAt(0)-b)*(k%2+1))>c?1+(p-c):p;
        return k<14?i+p:j==((c=(c-(i%c)))<10?c:String.fromCharCode(c+b));
        },0);     
    }
    
    console.log(checksum('27AAPFU0939F1ZV'))
    console.log(checksum('27AASCS2460H1Z0'))
    console.log(checksum('29AAGCB7383J1Z4'))
    &#13;
    &#13;
    &#13;

    GST regex and checksum in various programming languages

答案 1 :(得分:13)

这是我想出的正则表达式:

/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/

根据H&R Block India GSTIN guide,第13个'数字'(实体代码)是“字母数字(首先是1-9,然后是A-Z)”。也就是说,不允许为零,A-Z代表10-35。因此,[1-9A-Z][0-9]更准确。

最后一位数字“校验位”确实是字母数字:[0-9A-Z]。我通过获取和测试实际的GSTIN来独立确认。

答案 2 :(得分:7)

GSTIN的正确验证应为

^([0][1-9]|[1-2][0-9]|[3][0-5])([a-zA-Z]{5}[0-9]{4}[a-zA-Z]{1}[1-9a-zA-Z]{1}[zZ]{1}[0-9a-zA-Z]{1})+$

前两位数字表示“土地区域代码清单”中定义的“国家代码”(01-35)(2011年印度人口普查 - link

接下来的10个字符与AAAAA9999X格式的PAN编号有关。

第13个字符表示实体在同一PAN状态下的注册数。

第14个字符目前默认为“Z”

第15个字符是校验和数字

这种正则表达式适用于大写和小写。

答案 3 :(得分:4)

要添加上述答案,此答案还提供校验和数字的代码段

public static final String GSTINFORMAT_REGEX = "[0-9]{2}[a-zA-Z]{5}[0-9]{4}[a-zA-Z]{1}[1-9A-Za-z]{1}[Z]{1}[0-9a-zA-Z]{1}";
public static final String GSTN_CODEPOINT_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String getGSTINWithCheckDigit(String gstinWOCheckDigit) throws Exception {
            int factor = 2;
            int sum = 0;
            int checkCodePoint = 0;
            char[] cpChars;
            char[] inputChars;

            try {
                if (gstinWOCheckDigit == null) {
                    throw new Exception("GSTIN supplied for checkdigit calculation is null");
                }
                cpChars = GSTN_CODEPOINT_CHARS.toCharArray();
                inputChars = gstinWOCheckDigit.trim().toUpperCase().toCharArray();

                int mod = cpChars.length;
                for (int i = inputChars.length - 1; i >= 0; i--) {
                    int codePoint = -1;
                    for (int j = 0; j < cpChars.length; j++) {
                        if (cpChars[j] == inputChars[i]) {
                            codePoint = j;
                        }
                    }
                    int digit = factor * codePoint;
                    factor = (factor == 2) ? 1 : 2;
                    digit = (digit / mod) + (digit % mod);
                    sum += digit;
                }
                checkCodePoint = (mod - (sum % mod)) % mod;
                return gstinWOCheckDigit + cpChars[checkCodePoint];
            } finally {
                inputChars = null;
                cpChars = null;
            }
        }

来源:GST Google Group LinkCode Snippet Link

答案 4 :(得分:2)

我使用了这个并且对抗 30+ GSTIN 并且它完美无瑕。

.babelrc

最后检查数字在我遇到的一些GSTIN中似乎也是字母数字。

答案 5 :(得分:2)

试试这个。     它按照GSTIN工作。

^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$

答案 6 :(得分:2)

使用jQuery尝试这个

&#13;
&#13;
[^"]
&#13;
UPDATE collection SET field = 'foo' WHERE field = 'bar';
&#13;
&#13;
&#13;

答案 7 :(得分:2)

regex的正确GSTIN如下

^([0][1-9]|[1-2][0-9]|[3][0-7])([A-Z]{5})([0-9]{4})([A-Z]{1}[1-9A-Z]{1})([Z]{1})([0-9A-Z]{1})+$

上述内容已经适用于300多名有效纳税人,您可以通过此link

进行验证

答案 8 :(得分:1)

Below is GSTIN Format

这是 100% 准确的 GSTIN 正则表达式,因为它会检查上图中提到的所有内容。

[0-9]{2}[A-Z]{3}[ABCFGHLJPTF]{1}[A-Z]{1}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}

答案 9 :(得分:1)

正则表达式应该是:

/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[0-9]{1}Z[0-9]{1}/

答案 10 :(得分:1)

正确的正则表达式可能是:

/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[0-9]{1}Z[0-9]{1}?$/

它对我有用。

答案 11 :(得分:0)

正确的GSTIN验证将涵盖印度的37个州,

{{1}}

答案 12 :(得分:0)

<asp:RegularExpressionValidator
 ID="RegularExpressionValidator1"
 ValidationExpression="[0-9]{2}[(a-z)(A-Z)]{5}\d{4}[(a-z)(A-Z)]{1}\d{1}Z\d{1}" 
 SetFocusOnError="true"
 ControlToValidate="txtGST"
 Display="Dynamic"
 runat="server"                                                            
 ErrorMessage="Invalid GST No."
 ValidationGroup="Add"
 ForeColor="Red"></asp:RegularExpressionValidator>

答案 13 :(得分:0)

如果要使用节点库,可以使用https://npmjs.org/gstin-validator

var validator = require('gstin-validator');
validator.isValidGSTNumber('12AAACI1681G1Z0'); //returns boolean value.
validator.ValidateGSTIN('47AAACI1681G1Z0'); // returns a response string with Error message
validator.getGSTINInfo('12AAACI1681G1Z0'); // returns metadata for GSTIN based on numbering scheme followed

答案 14 :(得分:0)

这是可以在代码中使用的通用紧凑型正则表达式: ^ \ d {2} \ D {5} \ d {4} \ D \ dZ \ w

用于GSTIN验证的Swift 4代码如下:

    class func isValidGSTIN(_ gstin : String)-> Bool {
        let gstinRegex = "^\\d{2}\\D{5}\\d{4}\\D\\dZ\\w"
        let test = NSPredicate(format: "SELF MATCHES %@", gstinRegex)
        return test.evaluate(with: gstin.uppercased())
    }

答案 15 :(得分:0)

GST FORMAT

public static boolean validateGST(CharSequence gst){
         if(gst!=null)
          return Pattern.matches("\\d{2}[a-zA-Z]{5}\\d{4}[a-zA-Z] 
                                {1}\\d{1}[zZ]{1}[\\da-zA-Z]{1}",gst);
      else
        return false;
  }

答案 16 :(得分:0)

如果您使用yup,请尝试以下代码为我工作

gst_no:Yup.string()
    .trim()
    .matches(/[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}[1-9A-Z]{1}$/ , 'Is not in correct format')
    .required(),  

输入:21LKJLK1235M22