Tally GSTNo Validation Formula & What Is Weakness Of Tally Validation

Discussion in 'Tally Developer' started by drive, Feb 28, 2020.

    
  1. drive

    drive Active Member


    /*
    ;; Here I Found Actual Tally GSTNo Validation Formula How Is work & What Is Weakness of Tally GSTNo Validation.

    ;; First Weakness of GSTNo Validation
    Any 2 Odd Or Even Value Change Then Its Not Get Result

    Example : PAN No. ABCDE1234G
    When in GST No. Type : "ABBDF1234G" (3 Character Decrease and 5 Character Increase) Then Not Show Any Error in Tally GST Validation. Try IT



    Hear Is Full Working GST Validation
    */
    ;; Add Field After LEDGSTIN
    [#Line: LED GSTIN]
    Add: Field: At End: FGSTCheck

    [Field: FGSTCheck]
    Use: Name Field
    On: Accept: Yes: Field Accept
    On: Accept: Yes: Call: Fc_GSTCheck:$$Value
    Background: RED

    [Function: Fc_GSTCheck]
    Parameter: pGSTNo : String
    Variable: vGSTNO : String
    Variable: vFirst14Digit : String

    ;; Convert To Capital
    10 : Set: vGSTNo : $$CaseConvert:AllCapital:##pGSTNo

    ;; Check 15 Digit
    20 : Do If: ($$StringLength:##vGSTNo != 15) : Msg Box: "Error" : "Total Character Should Be 15 Digit"

    ;; Check First 2 Character Is Number
    30 : Do If: Not($$FuncIsNumber:($$StringPart:##vGSTNo:0:2)) : Msg Box: "Error" : "First 2 Character Should Be Number"

    ;; Check PAN No
    40 : Do If: Not ($$FuncIsValidPAN:($$StringPart:##vGSTNo:2:12)) : Msg Box: "Error" : "Check PAN"

    ;; 2nd Last Digit
    50 : Do If: ($$StringPart:##vGSTNo:13:1) != "Z" : Msg Box: "Error" : "2nd Last Digit Should Be 'Z'"

    ;; Store First 14 Digit In Variable
    60 : Set: vFirst14Digit: ($$StringPart:##vGSTNo:0:14)

    ;; Compare Last Character
    70 : Do If: ($$StringPart:##vGSTNo:14:1) != ($$Fc_CheckLastDegit:##vFirst14Digit) : Msg Box: "Error" : "Invalid GST No."


    [Function: Fc_CheckLastDegit]
    Parameter: pFirst14Digit: String
    Variable: vIndex : Number: 1
    Variable: vLoopChar : String
    Variable: vLoopNum : Number
    Variable: vTmpSum : Number
    Variable: vODDValue : Number
    Variable: vModAmt : Number
    Variable: vTotalOFSum : Number
    Variable: vCuttentSum : Number
    Variable: vReturn : String


    ;; Add List Variable In Character Position
    010 : WHILE : ##vIndex <= 14

    ;; Split Loop Character
    020 : SET: vLoopChar : $$StringPart:##pFirst14Digit:(##vIndex-1):1

    ;; Find Current Character Position
    030 : Set: vLoopNum : $$Fc_ReturnNumber:##vLoopChar

    ;; Get Odd Even Number
    040 : Set: vODDValue : IF $$isOdd:##vIndex Then 1 Else 2


    ;; Store Tmp Value
    050 : Set: vTmpSum : (##vLoopNum * ##vODDValue)


    ;; MOD Function Alternative formula (=number-(INT(number/divisor)*divisor))
    060 : Set: vModAmt : (##vTmpSum -(($$RoundDown:(##vTmpSum/36):1.00 ) * 36))

    ;; Sum OF Value
    070 : Set: vCuttentSum : (##vTmpSum / 36) + ##vModAmt

    ;; Sum Rounding
    080 : Set: vCuttentSum : $$RoundDown:##vCuttentSum:1.00

    ;; Add In Total Sum
    090 : Set: vTotalOFSum : ##vTotalOFSum + ##vCuttentSum

    100 : INCR : vIndex

    110 : End While

    ;;======================================================;;
    ;; GET Number To Character /*MOD(36-MOD(Sum,36),36)*/ ;;
    ;;======================================================;;

    ;; MOD Function Alternative formula (=number-(INT(number/divisor)*divisor))
    200 : Set: vModAmt : (##vTotalOFSum - (($$RoundDown:(##vTotalOFSum/36):1.00)*36))

    ;; Subtract 36
    210 : Set: vModAmt : 36 - ##vModAmt

    ;; MOD Function Alternative formula (=number-(INT(number/divisor)*divisor))
    220 : Set: vModAmt : (##vModAmt - (($$RoundDown:(##vModAmt/36):1.00)*36))

    ;; Store Return Character
    230 : Set: vReturn : $$Fc_ReturnCharacter:##vModAmt

    ;; Return Character
    250 : Return: ##vReturn

    [Function: Fc_ReturnNumber]
    Parameter: pCharacter : String
    Return: Number
    01 : Do IF : ##pCharacter = "0" : Return: 0
    02 : Do IF : ##pCharacter = "1" : Return: 1
    03 : Do IF : ##pCharacter = "2" : Return: 2
    04 : Do IF : ##pCharacter = "3" : Return: 3
    05 : Do IF : ##pCharacter = "4" : Return: 4
    06 : Do IF : ##pCharacter = "5" : Return: 5
    07 : Do IF : ##pCharacter = "6" : Return: 6
    08 : Do IF : ##pCharacter = "7" : Return: 7
    09 : Do IF : ##pCharacter = "8" : Return: 8
    10 : Do IF : ##pCharacter = "9" : Return: 9
    11 : Do IF : ##pCharacter = "A" : Return: 10
    12 : Do IF : ##pCharacter = "B" : Return: 11
    13 : Do IF : ##pCharacter = "C" : Return: 12
    14 : Do IF : ##pCharacter = "D" : Return: 13
    15 : Do IF : ##pCharacter = "E" : Return: 14
    16 : Do IF : ##pCharacter = "F" : Return: 15
    17 : Do IF : ##pCharacter = "G" : Return: 16
    18 : Do IF : ##pCharacter = "H" : Return: 17
    19 : Do IF : ##pCharacter = "I" : Return: 18
    20 : Do IF : ##pCharacter = "J" : Return: 19
    21 : Do IF : ##pCharacter = "K" : Return: 20
    22 : Do IF : ##pCharacter = "L" : Return: 21
    23 : Do IF : ##pCharacter = "M" : Return: 22
    24 : Do IF : ##pCharacter = "N" : Return: 23
    25 : Do IF : ##pCharacter = "O" : Return: 24
    26 : Do IF : ##pCharacter = "P" : Return: 25
    27 : Do IF : ##pCharacter = "Q" : Return: 26
    28 : Do IF : ##pCharacter = "R" : Return: 27
    29 : Do IF : ##pCharacter = "S" : Return: 28
    30 : Do IF : ##pCharacter = "T" : Return: 29
    31 : Do IF : ##pCharacter = "U" : Return: 30
    32 : Do IF : ##pCharacter = "V" : Return: 31
    33 : Do IF : ##pCharacter = "W" : Return: 32
    34 : Do IF : ##pCharacter = "X" : Return: 33
    35 : Do IF : ##pCharacter = "Y" : Return: 34
    36 : Do IF : ##pCharacter = "Z" : Return: 35

    [Function: Fc_ReturnCharacter]
    Parameter: pNumber : Number
    Return: String
    01 : Do IF : ##pNumber = 0 : Return: "0"
    02 : Do IF : ##pNumber = 1 : Return: "1"
    03 : Do IF : ##pNumber = 2 : Return: "2"
    04 : Do IF : ##pNumber = 3 : Return: "3"
    05 : Do IF : ##pNumber = 4 : Return: "4"
    06 : Do IF : ##pNumber = 5 : Return: "5"
    07 : Do IF : ##pNumber = 6 : Return: "6"
    08 : Do IF : ##pNumber = 7 : Return: "7"
    09 : Do IF : ##pNumber = 8 : Return: "8"
    10 : Do IF : ##pNumber = 9 : Return: "9"
    11 : Do IF : ##pNumber = 10 : Return: "A"
    12 : Do IF : ##pNumber = 11 : Return: "B"
    13 : Do IF : ##pNumber = 12 : Return: "C"
    14 : Do IF : ##pNumber = 13 : Return: "D"
    15 : Do IF : ##pNumber = 14 : Return: "E"
    16 : Do IF : ##pNumber = 15 : Return: "F"
    17 : Do IF : ##pNumber = 16 : Return: "G"
    18 : Do IF : ##pNumber = 17 : Return: "H"
    19 : Do IF : ##pNumber = 18 : Return: "I"
    20 : Do IF : ##pNumber = 19 : Return: "J"
    21 : Do IF : ##pNumber = 20 : Return: "K"
    22 : Do IF : ##pNumber = 21 : Return: "L"
    23 : Do IF : ##pNumber = 22 : Return: "M"
    24 : Do IF : ##pNumber = 23 : Return: "N"
    25 : Do IF : ##pNumber = 24 : Return: "O"
    26 : Do IF : ##pNumber = 25 : Return: "P"
    27 : Do IF : ##pNumber = 26 : Return: "Q"
    28 : Do IF : ##pNumber = 27 : Return: "R"
    29 : Do IF : ##pNumber = 28 : Return: "S"
    30 : Do IF : ##pNumber = 29 : Return: "T"
    31 : Do IF : ##pNumber = 30 : Return: "U"
    32 : Do IF : ##pNumber = 31 : Return: "V"
    33 : Do IF : ##pNumber = 32 : Return: "W"
    34 : Do IF : ##pNumber = 33 : Return: "X"
    35 : Do IF : ##pNumber = 34 : Return: "Y"
    36 : Do IF : ##pNumber = 35 : Return: "Z"
     
    Last edited: Feb 28, 2020


  2. N vinoth

    N vinoth Guest


    always your great sir!!!!!!!!!!!!!!
     



  3. there is a bug is checked. but last char always will "Z" is not ok, and its popup always even if having correct GSTN
     


Share This Page