codigoEjercicio

download codigoEjercicio

of 12

Transcript of codigoEjercicio

  • 7/23/2019 codigoEjercicio

    1/12

    --------------------1.1.1 Z_CUST_TBL. Z_VAT_RGSTRN_ID.FIELDEDIT------------------------

    Declare Function VALIDATE_REG_ID PeopleCode Z_CUST_TBL.Z_VAT_RGSTRN_ID FieldFormula;

    If All(Z_CUST_TBL.Z_VAT_RGSTRN_ID) Then

    If Not VALIDATE_REG_ID(Z_CUST_TBL.COUNTRY, "VAT", Z_CUST_TBL.Z_VAT_RGSTRN_ID)Then Error MsgGetText(20000, 2, "Missing Message - Invalid VAT Registration ID"); End-If;End-If;

    ---------------------1.1.1 Z_CUST_TBL.Z_VAT_RGSTRN_ID.FIELDFORMULA------------------------

    /****************************************************** VAT ID Validation Routines *

    *****************************************************/Function Validation_Check(&REG_ID, &START, &LENGTH, &CHECK_DIGIT) Returns boolean; Evaluate &CHECK_DIGIT When = 0 &CHECKSUM = "J"; Break; When = 1 &CHECKSUM = "A"; Break; When = 2 &CHECKSUM = "B"; Break;

    When = 3 &CHECKSUM = "C"; Break; When = 4 &CHECKSUM = "D"; Break; When = 5 &CHECKSUM = "E"; Break; When = 6 &CHECKSUM = "F"; Break;

    When = 7 &CHECKSUM = "G"; Break; When = 8 &CHECKSUM = "H"; Break; When = 9 &CHECKSUM = "I"; Break; When-Other &CHECKSUM = ""; Break; End-Evaluate;

    &STR = Substring(&REG_ID, &START, &LENGTH); Return Exact(&STR, &CHECKSUM);

  • 7/23/2019 codigoEjercicio

    2/12

    End-Function;

    Function Check_Number(&STR) Returns boolean; &LEN = Len(&STR); If &LEN = 0 Then Return False;

    End-If; For &I = 1 To &LEN; &CODE = Code(Substring(&STR, &I, 1)); If (&CODE < 48 Or &CODE > 57) Then Return False; End-If; End-For; Return True;End-Function;

    Function Check_Letter(&STR) Returns boolean;

    &LEN = Len(&STR); If &LEN = 0 Then Return False; End-If; For &I = 1 To &LEN; &CODE = Code(Upper(Substring(&STR, &I, 1))); If (&CODE < 65 Or &CODE > 90) Then Return False; End-If; End-For; Return True;End-Function;

    Function Add_Digit(&MODE, &TYPE, &INPUT) Returns number; Evaluate &MODE When = "R" &TOTAL = 0; When = "A" Evaluate &TYPE When = "D" &STR = String(&INPUT); &LEN = Len(&STR); For &I = 1 To &LEN; &TOTAL = &TOTAL + Value(Substring(&STR, &I, 1)); End-For; When = "N" &TOTAL = &TOTAL + &INPUT; End-Evaluate; End-Evaluate; Return &TOTAL;End-Function;

    Function Calculate_Control_Key(&REG_ID, &START, &LENGTH, &CONTROL, &TYPE) Returns number; &RESULT = Add_Digit("R", "", 0); &SUBREG = Substring(&REG_ID, &START, &LENGTH); &REGID_LEN = Len(&SUBREG);

    &CNTRL_LEN = Len(&CONTROL); If &REGID_LEN = &CNTRL_LEN Then For &J = 1 To &REGID_LEN;

  • 7/23/2019 codigoEjercicio

    3/12

    &NUM1 = Value(Substring(&SUBREG, &J, 1)); &NUM2 = Value(Substring(&CONTROL, &J, 1)); &RESULT = Add_Digit("A", &TYPE, &NUM1 * &NUM2); End-For; End-If; Return &RESULT;End-Function;

    Function Calculate_Mod(&MOD_INPUT, &MOD_DIGIT) Returns number; &MOD_INPUT = &MOD_DIGIT - Mod(&MOD_INPUT, &MOD_DIGIT); If &MOD_INPUT = &MOD_DIGIT Then &MOD_INPUT = 0; End-If; Return &MOD_INPUT;End-Function;

    Function Calculate_Mod_BEL(&MOD_INPUT, &MOD_DIGIT) Returns number; &MOD_INPUT = &MOD_DIGIT - Mod(&MOD_INPUT, &MOD_DIGIT); Return &MOD_INPUT;

    End-Function;

    Function Validate_Check_Digit(&REG_ID, &START, &LENGTH, &CHECK_DIGIT) Returns boolean; &STR = Substring(&REG_ID, &START, &LENGTH); &LEN = Len(&CHECK_DIGIT); If &LENGTH > &LEN Then &CHECK_DIGIT = Rept("0", &LENGTH - &LEN) | &CHECK_DIGIT; End-If; Return Exact(&STR, &CHECK_DIGIT);End-Function;

    Function Check_BEL_ID(&REG_ID_TYPE, &REG_ID) Returns boolean;

    If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 10 Then Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 9)) Then Return False; End-If; If Len(&REG_ID) = 9 Then &CHECKSUM = Value(Substring(&REG_ID, 1, 7)); &CHECKSUM = Calculate_Mod_BEL(&CHECKSUM, 97); Return Validate_Check_Digit(&REG_ID, 8, 2, String(&CHECKSUM)); End-If; If Len(&REG_ID) = 10 Then If Value(Substring(&REG_ID, 1, 1)) = 0 Then &CHECKSUM = Value(Substring(&REG_ID, 2, 7)); &CHECKSUM = Calculate_Mod_BEL(&CHECKSUM, 97); Return Validate_Check_Digit(&REG_ID, 9, 2, String(&CHECKSUM)); Else Return False; End-If; End-If; End-If;End-Function;

    Function Check_FRA_ID(&REG_ID_TYPE, &REG_ID) Returns boolean;

    If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 11 Then Return False;

  • 7/23/2019 codigoEjercicio

    4/12

    End-If; If Not Check_Number(Substring(&REG_ID, 3, 11)) Then Return False; End-If; &CHECKSUM = Calculate_Control_Key(&REG_ID, 3, 8, "12121212", "D"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); If Not Validate_Check_Digit(&REG_ID, 11, 1, String(&CHECKSUM)) Then

    /* Only partial validation for monegasque VAT Id */ If Substring(&REG_ID, 3, 4) = "0000" Then Return True; Else; Return False; End-If; Else; Return True; End-If; End-If;End-Function;

    Function Check_GBR_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 9 Then Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 9)) Then Return False; End-If; &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 7, "8765432", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 97); If Validate_Check_Digit(&REG_ID, 8, 2, String(&CHECKSUM)) = False Then &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 7, "8765432", "N"); &CHECKSUM = &CHECKSUM + 55;

    &CHECKSUM = Calculate_Mod(&CHECKSUM, 97); Return Validate_Check_Digit(&REG_ID, 8, 2, String(&CHECKSUM)); Else Return True; End-If; End-If;End-Function;

    Function Check_ITA_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 11 Then Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 11)) Then Return False; End-If; &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 10, "1212121212", "D"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validate_Check_Digit(&REG_ID, 11, 1, String(&CHECKSUM)); End-If;

    If &REG_ID_TYPE = "TAX" Then If Len(&REG_ID) 16 Then Return False; End-If;

    &Table2 = CreateArray(1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11,3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23); &SUM = 0;

  • 7/23/2019 codigoEjercicio

    5/12

    For &I = 2 To 14 Step 2; &CHAR = Substring(&REG_ID, &I, 1); If &CHAR >= "A" And &CHAR = "0" And

    &CHAR = "A" And

    &CHAR = "0" And &CHAR

  • 7/23/2019 codigoEjercicio

    6/12

    If Len(&REG_ID) 9 And Len(&REG_ID) 10 Then Return False; End-If; If Check_Number(Substring(&REG_ID, 2, 7)) And Check_Letter(Substring(&REG_ID, 9, 1)) And Len(&REG_ID) = 9 Then

    &CHECKSUM = Calculate_Control_Key(&REG_ID, 2, 7, "2121212", "D");

    &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validation_Check(&REG_ID, 9, 1, String(&CHECKSUM));

    End-If; If Check_Number(Substring(&REG_ID, 2, 8)) And Check_Letter(Substring(&REG_ID, 10, 1)) And Len(&REG_ID) = 10 Then Return True; End-If; If Not Check_Number(Substring(&REG_ID, 2, 8)) Then

    Return False; End-If; &CHECKSUM = Calculate_Control_Key(&REG_ID, 2, 7, "2121212", "D"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validate_Check_Digit(&REG_ID, 9, 1, String(&CHECKSUM));End-Function;

    Function Check_ESP_NIF(&REG_ID) Returns boolean; /*INICIO MOTIVA 22-02-2012*/

    If Substring(&REG_ID, 1, 1) = "X" Or Substring(&REG_ID, 1, 1) = "Y" Or Substring(&REG_ID, 1, 1) = "Z" Then

  • 7/23/2019 codigoEjercicio

    7/12

    If Len(&REG_ID) 9 And Len(&REG_ID) 10 Then Return False; End-If; &LAST_CHAR = Substring(&REG_ID, Len(&REG_ID), 1); &NIF_ID = Substring(&REG_ID, 2, Len(&REG_ID) - 2);

    Evaluate Substring(&REG_ID, 1, 1) When = "X" Break; When = "Y" &NIF_ID = &NIF_ID + 10000000; Break; When = "Z" &NIF_ID = &NIF_ID + 20000000; Break; When-Other Return False; End-Evaluate;

    Else If Len(&REG_ID) 9 Then Return False; End-If; If Check_Number(Substring(&REG_ID, 2, 7)) And Check_Letter(Substring(&REG_ID, 1, 1)) And Len(&REG_ID) = 9 Then &NIF_ID = Substring(&REG_ID, 2, Len(&REG_ID)); End-If; If Check_Number(Substring(&REG_ID, 1, 8)) And Check_Letter(Substring(&REG_ID, 9, 1)) And Len(&REG_ID) = 9 Then &NIF_ID = Substring(&REG_ID, 1, Len(&REG_ID));

    End-If; &LAST_CHAR = Substring(&NIF_ID, Len(&NIF_ID), 1); &NIF_ID = Substring(&NIF_ID, 1, Len(&NIF_ID) - 1); If Not Check_Number(&NIF_ID) Then Return False; End-If; End-If;

    If Not Check_Number(&NIF_ID) Then Return False; End-If;

    /*FIN MOTIVA 22-02-2012*/ &NIF_RESULT = Value(&NIF_ID) - (Int(Value(&NIF_ID) / 23) * 23);

    Evaluate &NIF_RESULT When = 3 &NIF_LETTER = "A"; Break; When = 11 &NIF_LETTER = "B"; Break; When = 20 &NIF_LETTER = "C"; Break;

    When = 9 &NIF_LETTER = "D"; Break;

  • 7/23/2019 codigoEjercicio

    8/12

    When = 22 &NIF_LETTER = "E"; Break; When = 7 &NIF_LETTER = "F"; Break; When = 4

    &NIF_LETTER = "G"; Break; When = 18 &NIF_LETTER = "H"; Break; When = 13 &NIF_LETTER = "J"; Break; When = 21 &NIF_LETTER = "K"; Break; When = 19

    &NIF_LETTER = "L"; Break; When = 5 &NIF_LETTER = "M"; Break; When = 12 &NIF_LETTER = "N"; Break; When = 8 &NIF_LETTER = "P"; Break; When = 16 &NIF_LETTER = "Q";

    Break; When = 1 &NIF_LETTER = "R"; Break; When = 15 &NIF_LETTER = "S"; Break; When = 0 &NIF_LETTER = "T"; Break; When = 23 &NIF_LETTER = "T"; Break; When = 17 &NIF_LETTER = "V"; Break; When = 2 &NIF_LETTER = "W"; Break; When = 10 &NIF_LETTER = "X"; Break; When = 6 &NIF_LETTER = "Y"; Break;

    When = 14 &NIF_LETTER = "Z"; Break;

  • 7/23/2019 codigoEjercicio

    9/12

    When-Other &NIF_LETTER = ""; Break; End-Evaluate; If &LAST_CHAR &NIF_LETTER Then Return False; End-If;

    Return True;End-Function;

    Function Check_ESP_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then Evaluate Substring(&REG_ID, 1, 1) When = "A" When = "B" When = "C" When = "D" When = "E" When = "F"

    When = "G" When = "H" When = "J" When = "N" When = "P" When = "Q" When = "S" When = "U" When = "V" When = "W" When = "R"

    Return Check_ESP_CIF(&REG_ID);

    When-Other Return Check_ESP_NIF(&REG_ID); End-Evaluate; End-If;End-Function;

    Function Check_IRL_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) < 8 Or Len(&REG_ID) > 9 Then Return False; End-If; If Len(&REG_ID) = 9 Then &lastdigit = Substring(&REG_ID, 9, 1); If &lastdigit "T" And &lastdigit "W" And &lastdigit "X" Then Return False; End-If; End-If; If Not Check_Number(Substring(&REG_ID, 1, 1)) Or Not Check_Number(Substring(&REG_ID, 3, 5)) Then Return False; End-If;

    If Check_Number(Substring(&REG_ID, 2, 1)) Then &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 7, "8765432", "N"); &CHECKSUM = Mod(&CHECKSUM, 23);

  • 7/23/2019 codigoEjercicio

    10/12

    If &CHECKSUM = 0 Then &CHECKSUM = 23 End-If; Return Validate_Check_Digit(&REG_ID, 8, 1, Char(&CHECKSUM + 64));

    Else &FirstDigit = Substring(&REG_ID, 1, 1);

    If &FirstDigit < 7 Then Return False; End-If; End-If; Return True; End-If;End-Function;

    Function Check_CAN_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 9 And Len(&REG_ID) 15 Then

    Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 9)) Then Return False; End-If; If Len(&REG_ID) = 15 Then If Not Check_Number(Substring(&REG_ID, 12, 4)) Then Return False; End-If; &ACCT = Substring(&REG_ID, 10, 2); If &ACCT "RC" And &ACCT "RM" And &ACCT "RP" And

    &ACCT "RT" Then Return False; End-If; End-If; &STR = Substring(&REG_ID, 2, 1) | Substring(&REG_ID, 4, 1) | Substring(&REG_ID, 6, 1) | Substring(&REG_ID, 8, 1); &CHECKSUM = Calculate_Control_Key(&STR, 1, 4, "2222", "D"); &CHECKSUM = &CHECKSUM + Value(Substring(&REG_ID, 1, 1)) + Value(Substring(&REG_ID, 3, 1)) + Value(Substring(&REG_ID, 5, 1)) + Value(Substring(&REG_ID, 7,1)); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validate_Check_Digit(&REG_ID, 9, 1, String(&CHECKSUM)); End-If;End-Function;

    Function Check_DEU_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 9 Then Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 9)) Then Return False; End-If; &PRODUCT = 10; For &J = 1 To 8;

    &SUM = Value(Substring(&REG_ID, &J, 1)) + &PRODUCT; &SUM = Mod(&SUM, 10); If &SUM = 0 Then

  • 7/23/2019 codigoEjercicio

    11/12

    &SUM = 10; End-If; &PRODUCT = Mod((2 * &SUM), 11); End-For; &CHECKSUM = 11 - &PRODUCT; If &CHECKSUM = 10 Then &CHECKSUM = 0;

    End-If; Return Validate_Check_Digit(&REG_ID, 9, 1, String(&CHECKSUM)); End-If;End-Function;

    Function Check_AUS_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 11 Then Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 11)) Then Return False;

    End-If; &SUM = (Value(Substring(&REG_ID, 1, 1)) - 1) * 10; &WEIGHT = 1; For &J = 2 To 11; &SUM = &SUM + (Value(Substring(&REG_ID, &J, 1)) * &WEIGHT); &WEIGHT = &WEIGHT + 2; End-For; If Mod(&SUM, 89) = 0 Then Return True; Else Return False; End-If; End-If;

    End-Function;

    Function Check_NZL_ID(&REG_ID_TYPE, &REG_ID) Returns boolean; If &REG_ID_TYPE = "VAT" Then If Len(&REG_ID) 8 And Len(&REG_ID) 9 Then Return False; End-If; If Not Check_Number(Substring(&REG_ID, 1, 9)) Then Return False; End-If; If Len(&REG_ID) = 9 Then &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 8, "32765432", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11); If &CHECKSUM 10 Then Return Validate_Check_Digit(&REG_ID, 9, 1, String(&CHECKSUM)); Else &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 8, "74325276", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11); Return Validate_Check_Digit(&REG_ID, 9, 1, String(&CHECKSUM)); End-If; End-If; If Len(&REG_ID) = 8 Then &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 7, "2765432", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11);

    If &CHECKSUM 10 Then Return Validate_Check_Digit(&REG_ID, 8, 1, String(&CHECKSUM)); Else

  • 7/23/2019 codigoEjercicio

    12/12

    &CHECKSUM = Calculate_Control_Key(&REG_ID, 1, 7, "4325276", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11); Return Validate_Check_Digit(&REG_ID, 8, 1, String(&CHECKSUM)); End-If; End-If; End-If;End-Function;

    Function Validate_Reg_ID(&COUNTRY, &REG_ID_TYPE, &REG_ID) Returns boolean; Evaluate &COUNTRY When = "BEL" Return Check_BEL_ID(&REG_ID_TYPE, &REG_ID); When = "FRA" Return Check_FRA_ID(&REG_ID_TYPE, &REG_ID); When = "GBR" Return Check_GBR_ID(&REG_ID_TYPE, &REG_ID); When = "ITA" Return Check_ITA_ID(&REG_ID_TYPE, &REG_ID); When = "NLD"

    Return Check_NLD_ID(&REG_ID_TYPE, &REG_ID); When = "ESP" Return Check_ESP_ID(&REG_ID_TYPE, &REG_ID); When = "IRL" Return Check_IRL_ID(&REG_ID_TYPE, &REG_ID); When = "CAN" Return Check_CAN_ID(&REG_ID_TYPE, &REG_ID); When = "DEU" Return Check_DEU_ID(&REG_ID_TYPE, &REG_ID); When = "AUS" Return Check_AUS_ID(&REG_ID_TYPE, &REG_ID); When = "NZL" Return Check_NZL_ID(&REG_ID_TYPE, &REG_ID);

    When-Other Return True; End-Evaluate;End-Function;