codigoEjercicio
-
Upload
alvaro-martin-torres -
Category
Documents
-
view
217 -
download
0
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(®_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(®_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(®_ID, &START, &LENGTH, &CONTROL, &TYPE) Returns number; &RESULT = Add_Digit("R", "", 0); &SUBREG = Substring(®_ID, &START, &LENGTH); ®ID_LEN = Len(&SUBREG);
&CNTRL_LEN = Len(&CONTROL); If ®ID_LEN = &CNTRL_LEN Then For &J = 1 To ®ID_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(®_ID, &START, &LENGTH, &CHECK_DIGIT) Returns boolean; &STR = Substring(®_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(®_ID_TYPE, ®_ID) Returns boolean;
If ®_ID_TYPE = "VAT" Then If Len(®_ID) 10 Then Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 9)) Then Return False; End-If; If Len(®_ID) = 9 Then &CHECKSUM = Value(Substring(®_ID, 1, 7)); &CHECKSUM = Calculate_Mod_BEL(&CHECKSUM, 97); Return Validate_Check_Digit(®_ID, 8, 2, String(&CHECKSUM)); End-If; If Len(®_ID) = 10 Then If Value(Substring(®_ID, 1, 1)) = 0 Then &CHECKSUM = Value(Substring(®_ID, 2, 7)); &CHECKSUM = Calculate_Mod_BEL(&CHECKSUM, 97); Return Validate_Check_Digit(®_ID, 9, 2, String(&CHECKSUM)); Else Return False; End-If; End-If; End-If;End-Function;
Function Check_FRA_ID(®_ID_TYPE, ®_ID) Returns boolean;
If ®_ID_TYPE = "VAT" Then If Len(®_ID) 11 Then Return False;
-
7/23/2019 codigoEjercicio
4/12
End-If; If Not Check_Number(Substring(®_ID, 3, 11)) Then Return False; End-If; &CHECKSUM = Calculate_Control_Key(®_ID, 3, 8, "12121212", "D"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); If Not Validate_Check_Digit(®_ID, 11, 1, String(&CHECKSUM)) Then
/* Only partial validation for monegasque VAT Id */ If Substring(®_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(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) 9 Then Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 9)) Then Return False; End-If; &CHECKSUM = Calculate_Control_Key(®_ID, 1, 7, "8765432", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 97); If Validate_Check_Digit(®_ID, 8, 2, String(&CHECKSUM)) = False Then &CHECKSUM = Calculate_Control_Key(®_ID, 1, 7, "8765432", "N"); &CHECKSUM = &CHECKSUM + 55;
&CHECKSUM = Calculate_Mod(&CHECKSUM, 97); Return Validate_Check_Digit(®_ID, 8, 2, String(&CHECKSUM)); Else Return True; End-If; End-If;End-Function;
Function Check_ITA_ID(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) 11 Then Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 11)) Then Return False; End-If; &CHECKSUM = Calculate_Control_Key(®_ID, 1, 10, "1212121212", "D"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validate_Check_Digit(®_ID, 11, 1, String(&CHECKSUM)); End-If;
If ®_ID_TYPE = "TAX" Then If Len(®_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(®_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(®_ID) 9 And Len(®_ID) 10 Then Return False; End-If; If Check_Number(Substring(®_ID, 2, 7)) And Check_Letter(Substring(®_ID, 9, 1)) And Len(®_ID) = 9 Then
&CHECKSUM = Calculate_Control_Key(®_ID, 2, 7, "2121212", "D");
&CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validation_Check(®_ID, 9, 1, String(&CHECKSUM));
End-If; If Check_Number(Substring(®_ID, 2, 8)) And Check_Letter(Substring(®_ID, 10, 1)) And Len(®_ID) = 10 Then Return True; End-If; If Not Check_Number(Substring(®_ID, 2, 8)) Then
Return False; End-If; &CHECKSUM = Calculate_Control_Key(®_ID, 2, 7, "2121212", "D"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validate_Check_Digit(®_ID, 9, 1, String(&CHECKSUM));End-Function;
Function Check_ESP_NIF(®_ID) Returns boolean; /*INICIO MOTIVA 22-02-2012*/
If Substring(®_ID, 1, 1) = "X" Or Substring(®_ID, 1, 1) = "Y" Or Substring(®_ID, 1, 1) = "Z" Then
-
7/23/2019 codigoEjercicio
7/12
If Len(®_ID) 9 And Len(®_ID) 10 Then Return False; End-If; &LAST_CHAR = Substring(®_ID, Len(®_ID), 1); &NIF_ID = Substring(®_ID, 2, Len(®_ID) - 2);
Evaluate Substring(®_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(®_ID) 9 Then Return False; End-If; If Check_Number(Substring(®_ID, 2, 7)) And Check_Letter(Substring(®_ID, 1, 1)) And Len(®_ID) = 9 Then &NIF_ID = Substring(®_ID, 2, Len(®_ID)); End-If; If Check_Number(Substring(®_ID, 1, 8)) And Check_Letter(Substring(®_ID, 9, 1)) And Len(®_ID) = 9 Then &NIF_ID = Substring(®_ID, 1, Len(®_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(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then Evaluate Substring(®_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(®_ID);
When-Other Return Check_ESP_NIF(®_ID); End-Evaluate; End-If;End-Function;
Function Check_IRL_ID(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) < 8 Or Len(®_ID) > 9 Then Return False; End-If; If Len(®_ID) = 9 Then &lastdigit = Substring(®_ID, 9, 1); If &lastdigit "T" And &lastdigit "W" And &lastdigit "X" Then Return False; End-If; End-If; If Not Check_Number(Substring(®_ID, 1, 1)) Or Not Check_Number(Substring(®_ID, 3, 5)) Then Return False; End-If;
If Check_Number(Substring(®_ID, 2, 1)) Then &CHECKSUM = Calculate_Control_Key(®_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(®_ID, 8, 1, Char(&CHECKSUM + 64));
Else &FirstDigit = Substring(®_ID, 1, 1);
If &FirstDigit < 7 Then Return False; End-If; End-If; Return True; End-If;End-Function;
Function Check_CAN_ID(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) 9 And Len(®_ID) 15 Then
Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 9)) Then Return False; End-If; If Len(®_ID) = 15 Then If Not Check_Number(Substring(®_ID, 12, 4)) Then Return False; End-If; &ACCT = Substring(®_ID, 10, 2); If &ACCT "RC" And &ACCT "RM" And &ACCT "RP" And
&ACCT "RT" Then Return False; End-If; End-If; &STR = Substring(®_ID, 2, 1) | Substring(®_ID, 4, 1) | Substring(®_ID, 6, 1) | Substring(®_ID, 8, 1); &CHECKSUM = Calculate_Control_Key(&STR, 1, 4, "2222", "D"); &CHECKSUM = &CHECKSUM + Value(Substring(®_ID, 1, 1)) + Value(Substring(®_ID, 3, 1)) + Value(Substring(®_ID, 5, 1)) + Value(Substring(®_ID, 7,1)); &CHECKSUM = Calculate_Mod(&CHECKSUM, 10); Return Validate_Check_Digit(®_ID, 9, 1, String(&CHECKSUM)); End-If;End-Function;
Function Check_DEU_ID(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) 9 Then Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 9)) Then Return False; End-If; &PRODUCT = 10; For &J = 1 To 8;
&SUM = Value(Substring(®_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(®_ID, 9, 1, String(&CHECKSUM)); End-If;End-Function;
Function Check_AUS_ID(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) 11 Then Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 11)) Then Return False;
End-If; &SUM = (Value(Substring(®_ID, 1, 1)) - 1) * 10; &WEIGHT = 1; For &J = 2 To 11; &SUM = &SUM + (Value(Substring(®_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(®_ID_TYPE, ®_ID) Returns boolean; If ®_ID_TYPE = "VAT" Then If Len(®_ID) 8 And Len(®_ID) 9 Then Return False; End-If; If Not Check_Number(Substring(®_ID, 1, 9)) Then Return False; End-If; If Len(®_ID) = 9 Then &CHECKSUM = Calculate_Control_Key(®_ID, 1, 8, "32765432", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11); If &CHECKSUM 10 Then Return Validate_Check_Digit(®_ID, 9, 1, String(&CHECKSUM)); Else &CHECKSUM = Calculate_Control_Key(®_ID, 1, 8, "74325276", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11); Return Validate_Check_Digit(®_ID, 9, 1, String(&CHECKSUM)); End-If; End-If; If Len(®_ID) = 8 Then &CHECKSUM = Calculate_Control_Key(®_ID, 1, 7, "2765432", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11);
If &CHECKSUM 10 Then Return Validate_Check_Digit(®_ID, 8, 1, String(&CHECKSUM)); Else
-
7/23/2019 codigoEjercicio
12/12
&CHECKSUM = Calculate_Control_Key(®_ID, 1, 7, "4325276", "N"); &CHECKSUM = Calculate_Mod(&CHECKSUM, 11); Return Validate_Check_Digit(®_ID, 8, 1, String(&CHECKSUM)); End-If; End-If; End-If;End-Function;
Function Validate_Reg_ID(&COUNTRY, ®_ID_TYPE, ®_ID) Returns boolean; Evaluate &COUNTRY When = "BEL" Return Check_BEL_ID(®_ID_TYPE, ®_ID); When = "FRA" Return Check_FRA_ID(®_ID_TYPE, ®_ID); When = "GBR" Return Check_GBR_ID(®_ID_TYPE, ®_ID); When = "ITA" Return Check_ITA_ID(®_ID_TYPE, ®_ID); When = "NLD"
Return Check_NLD_ID(®_ID_TYPE, ®_ID); When = "ESP" Return Check_ESP_ID(®_ID_TYPE, ®_ID); When = "IRL" Return Check_IRL_ID(®_ID_TYPE, ®_ID); When = "CAN" Return Check_CAN_ID(®_ID_TYPE, ®_ID); When = "DEU" Return Check_DEU_ID(®_ID_TYPE, ®_ID); When = "AUS" Return Check_AUS_ID(®_ID_TYPE, ®_ID); When = "NZL" Return Check_NZL_ID(®_ID_TYPE, ®_ID);
When-Other Return True; End-Evaluate;End-Function;