Witam wszystkich,
Od niedawna nasze ministerstwo finansów udostępnia listę płatników VAT w formie gargantuicznego JSONa(~200 mb). Problem, dla mnie, jest ze znalezieniem w tym pliku czegokolwiek. Specyfikacja i przykład nijak się mają do realnych danych udostępnionych na stronie ministerstwa. Moim problemem jest wyliczanie funkcji skrótu, i znalezienie jej w pliku. Algorytm którym się posługuje wygląda tak:
1. Z nagłówka pliku (lub jego nazwy pobieram datę - np. 20191121 z pliku testowego), do tego dokładam NIP i numer rachunku. Dla przykładu podam dane dostępne z pliku testowego na stronie ministerstwa: 20191121 + 9810000054 + 70102035709724546729803218 (pierwszy przykład ze strony).
2. Konkatenuję te dane do jednego ciągu znaków: 20191121981000005470102035709724546729803218
3. Wyliczam funkcję skrótu SHA-512 = BD191BD8E7A486622221AEAABFC1AA4D093EC09E7DD99A9E69F2C4DA6BAB3A0C5F2BACF905311340C27671641A3EDF221EF6A2EA6805E9C5A4ECF26281C89B78
4. Wchodzę do pliku i szukam wskazanego ciągu znaków (nie ma). Dla tego przypadku maska nie ma zastosowania (bank nie znajduje się na liście masek).
WW. problem występuje dla wszystkich sprawdzanych przeze mnie firm i numerów bankowych. Zakładam, że robię coś źle (kierowałem się przykładem podanym w specyfikacji pliku, gdzie podobny algorytm działa). Czy mógłby ktoś wskazać mi co jest nie tak? Próbowałem również zapętlić funkcję skrótu (wg danych z nagłówka) 5000 razy, ale powstaje również hash nie znajdujący się na żadnej liście.
Linki:
Generator hashy: https://passwordsgenerator.net/sha512-hash-generator/
Specyfikacja pliku: https://www.gov.pl/attachment/9b8daadb- ... c5ac991cb0
Dane testowe i plik testowy (na dole strony w materiałach): https://www.gov.pl/web/kas/plik-plaski
Z góry dzięki,
Damian
Biała lista podatników VAT: Plik Płaski
-
- Posty: 3
- Rejestracja: czw sty 22, 2015 2:58 pm
-
- Posty: 1
- Rejestracja: wt gru 10, 2019 1:47 pm
- Been thanked: 2 times
Re: Biała lista podatników VAT: Plik Płaski
Spróbuj tak:
CONCATENATE i_date i_nip i_iban INTO inp_string.
DO 5000 TIMES.
TRY.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA512'
if_data = inp_string
IMPORTING
ef_hashstring = out_string.
CATCH cx_abap_message_digest .
" ...
ENDTRY.
TRANSLATE out_string TO LOWER CASE.
inp_string = out_string.
ENDDO.
CONCATENATE i_date i_nip i_iban INTO inp_string.
DO 5000 TIMES.
TRY.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA512'
if_data = inp_string
IMPORTING
ef_hashstring = out_string.
CATCH cx_abap_message_digest .
" ...
ENDTRY.
TRANSLATE out_string TO LOWER CASE.
inp_string = out_string.
ENDDO.
-
- Posty: 3
- Rejestracja: czw sty 22, 2015 2:58 pm
Re: Biała lista podatników VAT: Plik Płaski
Cześć,
Dzięki, tak to miałem ogarnięte. Problem już rozwiązany
Brakowało mi własnie translacji "TO LOWER CASE".
Dzięki mimo wszystko.
Pzdr,
Damian
Dzięki, tak to miałem ogarnięte. Problem już rozwiązany

Dzięki mimo wszystko.
Pzdr,
Damian
-
- Posty: 6
- Rejestracja: czw gru 19, 2019 4:58 am
- Been thanked: 2 times
Re: Biała lista podatników VAT: Plik Płaski
A mi to nie działa.
Dla tego samego przykładu co poprzednik , wychodzi mi taka sama suma kontrolna .
Brałem już przykłady "bez maski" , "z maską" i nie umiem tego poprawnie
I nie znajduje jej w przykładowym jsonie...
Oczywiście jest "lower case".
Jakiś bug czy co ?
Dla tego samego przykładu co poprzednik , wychodzi mi taka sama suma kontrolna .
Brałem już przykłady "bez maski" , "z maską" i nie umiem tego poprawnie
I nie znajduje jej w przykładowym jsonie...
Oczywiście jest "lower case".
Jakiś bug czy co ?
Re: Biała lista podatników VAT: Plik Płaski
Witam.
Ja również mam ten sam problem.
Zaimplementowałem rozwiązanie z poniższego postu, w system SAP na którym pracuję.
Data: 20191121
NIP: 9810000054
Konto Bankowe: 70102035709724546729803218
Niezależnie od tego czy metoda cl_abap_message_digest=>calculate_hash_for_char wykona się raz, czy 5000 razy, wynik jest zawsze taki sam, a dokładnie taki:
bd191bd8e7a486622221aeaabfc1aa4d093ec09e7dd99a9e69f2c4da6bab3a0c5f2bac
Niestety, otrzymany ciąg znaków nie zostaję znaleziony w przykładowym pliku JSON.
Pozdrawiam,
Damian
Ja również mam ten sam problem.
Zaimplementowałem rozwiązanie z poniższego postu, w system SAP na którym pracuję.
Dla przykładu z danych testowych:kiepski programista pisze: ↑wt gru 10, 2019 1:59 pm Spróbuj tak:
CONCATENATE i_date i_nip i_iban INTO inp_string.
DO 5000 TIMES.
TRY.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA512'
if_data = inp_string
IMPORTING
ef_hashstring = out_string.
CATCH cx_abap_message_digest .
" ...
ENDTRY.
TRANSLATE out_string TO LOWER CASE.
inp_string = out_string.
ENDDO.
Data: 20191121
NIP: 9810000054
Konto Bankowe: 70102035709724546729803218
Niezależnie od tego czy metoda cl_abap_message_digest=>calculate_hash_for_char wykona się raz, czy 5000 razy, wynik jest zawsze taki sam, a dokładnie taki:
bd191bd8e7a486622221aeaabfc1aa4d093ec09e7dd99a9e69f2c4da6bab3a0c5f2bac
Niestety, otrzymany ciąg znaków nie zostaję znaleziony w przykładowym pliku JSON.
Pozdrawiam,
Damian
-
- Posty: 6
- Rejestracja: czw gru 19, 2019 4:58 am
- Been thanked: 2 times
-
- Posty: 6
- Rejestracja: czw gru 19, 2019 4:58 am
- Been thanked: 2 times
Re: Biała lista podatników VAT: Plik Płaski
Ok już wiem.
Musisz to co wyliczyleś dalej puścić funkcją SHA512 i tak 5000 razy.
U mnie zadziało.
Musisz to co wyliczyleś dalej puścić funkcją SHA512 i tak 5000 razy.
U mnie zadziało.
Re: Biała lista podatników VAT: Plik Płaski
Serdeczne dzięki marcs_1.
To było dokładnie to, czego mi brakowało.
Teraz już znajduję wartości w pliku z danymi testowymi.
Pozdrawiam
Damian
To było dokładnie to, czego mi brakowało.
Teraz już znajduję wartości w pliku z danymi testowymi.
Pozdrawiam
Damian
-
- Posty: 6
- Rejestracja: czw gru 19, 2019 4:58 am
- Been thanked: 2 times
Re: Biała lista podatników VAT: Plik Płaski

Wesołych Świąt.
-
- Posty: 3
- Rejestracja: czw sty 22, 2015 2:58 pm
Re: Biała lista podatników VAT: Plik Płaski
Cześć,
Dodam tylko, że SAP zobowiązał się dostarczyć do końca stycznia własne rozwiązanie opierające się na SAP cloud integration platform. Ale nie znamy szczegółów, no i cały styczeń jesteśmy pozostawieni sami sobie.
Pzdr i wesołych świąt
Dodam tylko, że SAP zobowiązał się dostarczyć do końca stycznia własne rozwiązanie opierające się na SAP cloud integration platform. Ale nie znamy szczegółów, no i cały styczeń jesteśmy pozostawieni sami sobie.
Pzdr i wesołych świąt
-
- Posty: 6
- Rejestracja: czw gru 19, 2019 4:58 am
- Been thanked: 2 times
-
- Posty: 8071
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1775 times
- Been thanked: 1395 times
Re: Biała lista podatników VAT: Plik Płaski
Ciekawe to co piszesz. Jestem na 99.9% pewny, że ta funkcjonalność była poza zakresem: "White List" register of taxpayersDestylator pisze: ↑czw gru 19, 2019 1:58 pm Cześć,
Dodam tylko, że SAP zobowiązał się dostarczyć do końca stycznia własne rozwiązanie opierające się na SAP cloud integration platform. Ale nie znamy szczegółów, no i cały styczeń jesteśmy pozostawieni sami sobie.
Pzdr i wesołych świąt
Ciekaw jestem co spowodowało zmianę stanowiska SAP?
-
- Posty: 22
- Rejestracja: pt gru 09, 2016 12:04 pm
- Has thanked: 1 time
- Been thanked: 20 times
Re: Biała lista podatników VAT: Plik Płaski
mam taką informację wprost z SAP Polska
Termin realizacji: 29.01.2020.
Rozwiązanie będzie dostarczone w ramach utrzymania.
Będzie konieczność dokupić licencje dla szyny danych ( wymiana komunikatów):
• SAP Cloud Platform Integration, PI Edition” (material number 8004740) – 2 units (prod and test)
• SAP Cloud Platform bandwidth (material number 8000351) - 1 unit (10GB)
Opis, daty i status może sprawdzać na stronie: https://launchpad.support.sap.com/#/leg ... Expanded/0.
kłopot w tym, że trzeba to jeszcze poustawiać i posprawdzać, czyli na dwa miesiące (optymistyczne podejście) potrzebne jest dodatkowe narzędzie.....
Termin realizacji: 29.01.2020.
Rozwiązanie będzie dostarczone w ramach utrzymania.
Będzie konieczność dokupić licencje dla szyny danych ( wymiana komunikatów):
• SAP Cloud Platform Integration, PI Edition” (material number 8004740) – 2 units (prod and test)
• SAP Cloud Platform bandwidth (material number 8000351) - 1 unit (10GB)
Opis, daty i status może sprawdzać na stronie: https://launchpad.support.sap.com/#/leg ... Expanded/0.
kłopot w tym, że trzeba to jeszcze poustawiać i posprawdzać, czyli na dwa miesiące (optymistyczne podejście) potrzebne jest dodatkowe narzędzie.....
-
- Posty: 3
- Rejestracja: śr sty 08, 2020 11:52 am
Re: Biała lista podatników VAT: Plik Płaski
Witam,
mógłby Ktoś z tym pomóc bo nie zupełnie rozumiem. Tzn rozumiem ale mi nie działa. Robie to w Javie. Gdy robie pierwszy skrót to jest taki jaki Wy piszecie na forum (bd191bd8e7a486622221aeaabfc1aa4d093ec09e7dd99a9e69f2c4da6bab3a0c5f2bacf905311340c27671641a3edf221ef6a2ea6805e9c5a4ecf26281c89b78)
Następnie wywołuje funkcje ponownie na tym Skrócie i znowu na tym nowo powstałym i tak 5000 razy i sprawdzam za każdym razem i żaden nie pasuje do tych z pliku testowego.
w dużym skrócie tak to dziala:
last = encryptThisString("20191121981000005470102035709724546729803218");
wykonaj 4999 razy : last = encryptThisString(last);
-
- Posty: 6
- Rejestracja: czw gru 19, 2019 4:58 am
- Been thanked: 2 times
Re: Biała lista podatników VAT: Plik Płaski
masz ciąg znaków (przyklad prawdziwy)
20200108 NIP 5272472856 i rachunek 06 1840 0007 2614 0080 0819 0310
cały ciąg to 20200108527247285606184000072614008008190310
pierwszy hash to 30155ab51616f3ecafbdca9520f8b11ff6f6c3795af360ce65268c27dd1a39dc733a124cbc920c017b6e9bbbca3ee860a295c60ddc2b56680aae94c1dc8121d1
ale wynikowy hash to
d243981174cf00199544794effc5e887b0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0cf2c36876d98f2f50207d46c1f4b351da24f
I ten jest znajdowany
<--
cat 20200108.json | grep 0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0c
"d243981174cf00199544794effc5e887b0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0cf2c36876d98f2f50207d46c1f4b351da24f9",
-->
Podaję kod z Dynamicsa
public str CalculateHash1()
{
str s;
ClrObject obj;
//str tb = "20191219527247285609160011561847077970000001";
str tb = "20200108527247285606184000072614008008190310";
ClrObject SHA256;
System.Text.StringBuilder sBuilder;
ClrObject clrStr;
ClrObject clrStrObject;
System.Exception clrException;
System.Array resultByteArray;
int i;
int p;
int arrayLength ;
InteropPermission perm;
perm = new InteropPermission(InteropKind::ClrInterop);
perm.assert();
for (p=1; p<=5000; p+=1)
{
{
obj = System.Text.Encoding::get_ASCII().GetBytes(tb);
SHA256 = System.Security.Cryptography.SHA512::Create();
resultByteArray = SHA256.ComputeHash(obj);
//BP deviation documented
sBuilder = new System.Text.StringBuilder();
arrayLength = resultByteArray.get_Length() ;
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (i = 0; i <arrayLength; i++)
{
clrStrObject = resultByteArray.GetValue(i);
clrStr = clrStrObject.ToString('x2');
sBuilder.Append(clrStr);
}
// Return the hexadecimal string.
s = sBuilder.ToString();
}
CodeAccessPermission::revertAssert();
tb = s;
}
info(s);
return s;
}
20200108 NIP 5272472856 i rachunek 06 1840 0007 2614 0080 0819 0310
cały ciąg to 20200108527247285606184000072614008008190310
pierwszy hash to 30155ab51616f3ecafbdca9520f8b11ff6f6c3795af360ce65268c27dd1a39dc733a124cbc920c017b6e9bbbca3ee860a295c60ddc2b56680aae94c1dc8121d1
ale wynikowy hash to
d243981174cf00199544794effc5e887b0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0cf2c36876d98f2f50207d46c1f4b351da24f
I ten jest znajdowany
<--
cat 20200108.json | grep 0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0c
"d243981174cf00199544794effc5e887b0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0cf2c36876d98f2f50207d46c1f4b351da24f9",
-->
Podaję kod z Dynamicsa

public str CalculateHash1()
{
str s;
ClrObject obj;
//str tb = "20191219527247285609160011561847077970000001";
str tb = "20200108527247285606184000072614008008190310";
ClrObject SHA256;
System.Text.StringBuilder sBuilder;
ClrObject clrStr;
ClrObject clrStrObject;
System.Exception clrException;
System.Array resultByteArray;
int i;
int p;
int arrayLength ;
InteropPermission perm;
perm = new InteropPermission(InteropKind::ClrInterop);
perm.assert();
for (p=1; p<=5000; p+=1)
{
{
obj = System.Text.Encoding::get_ASCII().GetBytes(tb);
SHA256 = System.Security.Cryptography.SHA512::Create();
resultByteArray = SHA256.ComputeHash(obj);
//BP deviation documented
sBuilder = new System.Text.StringBuilder();
arrayLength = resultByteArray.get_Length() ;
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (i = 0; i <arrayLength; i++)
{
clrStrObject = resultByteArray.GetValue(i);
clrStr = clrStrObject.ToString('x2');
sBuilder.Append(clrStr);
}
// Return the hexadecimal string.
s = sBuilder.ToString();
}
CodeAccessPermission::revertAssert();
tb = s;
}
info(s);
return s;
}