Ik heb een klein bedrijfje en doe een aantal administratieve zaken op een locale webserver in PHP/MySQL.
Nu heb ik altijd mijn bankafschriften van ING ingevoerd d.m.v. een ASCII bestand en dat ging tot nog toe altijd goed. Met de komst van SEPA (en dus IBAN en BIC) wil ik graag m'n scriptje aanpassen om met een MT940 bestand te werken. Ik loop echter tegen een (wellicht onoverkomelijk) regex probleem aan...
Een afschrift in MT940 slaat de meeste informatie op in de 'omschrijvingsregel' (:86: veld), dit ziet er als volgt uit:
<rekening> <iban> <bic> <naam> <end-to-end-id> <omschrijving>
Het conflict zit hem in de overloop van naam naar 'end-to-end-id' (eteID) naar omschrijving.
Alle drie de velden kunnen spaties bevatten en zover ik kan vinden kunnen ze uit alle tekens van de SWIFT karakter set bestaan (zie onder voor de regex).
Het <naam>-veld heeft een maximale lengte van 70 karakters.
Tot nu toe heb ik alleen eteID's gezien met [0-9]+ formaat of als waarde 'NOTPROVIDED', maar ik dacht dat ook andere karakters mogelijk zijn. Het veld kan 1 tot 35 karakters bevatten.
Het <omschrijving>-veld heeft een maximale lengte van 140 karakters.
Mijn huidige (foutieve) plan van aanpak is:
Op zich werkt het, ware het niet dat ik een subset voor de <naam> gebruik en dus geen namen met getallen kan uitlezen.
Heeft iemand hier een betere ingeving dan ik ? (vast wel)
Nu heb ik altijd mijn bankafschriften van ING ingevoerd d.m.v. een ASCII bestand en dat ging tot nog toe altijd goed. Met de komst van SEPA (en dus IBAN en BIC) wil ik graag m'n scriptje aanpassen om met een MT940 bestand te werken. Ik loop echter tegen een (wellicht onoverkomelijk) regex probleem aan...
Een afschrift in MT940 slaat de meeste informatie op in de 'omschrijvingsregel' (:86: veld), dit ziet er als volgt uit:
<rekening> <iban> <bic> <naam> <end-to-end-id> <omschrijving>
Het conflict zit hem in de overloop van naam naar 'end-to-end-id' (eteID) naar omschrijving.
Alle drie de velden kunnen spaties bevatten en zover ik kan vinden kunnen ze uit alle tekens van de SWIFT karakter set bestaan (zie onder voor de regex).
Het <naam>-veld heeft een maximale lengte van 70 karakters.
Tot nu toe heb ik alleen eteID's gezien met [0-9]+ formaat of als waarde 'NOTPROVIDED', maar ik dacht dat ook andere karakters mogelijk zijn. Het veld kan 1 tot 35 karakters bevatten.
Het <omschrijving>-veld heeft een maximale lengte van 140 karakters.
Mijn huidige (foutieve) plan van aanpak is:
PHP:
1
2
3
4
5
6
7
8
| $swift = '[a-zA-Z0-9\/\-\?\(\)\.\,\+\'\{\}\: ]'; // SWIFT karakters $ete = '[0-9]{1,35}|NOTPROVIDED'; $name = '[a-zA-Z\/\-\?\(\)\.\,\+\'\{\}\: ]'; // subset van SWIFT (zonder getallen) if (preg_match('/(alle andere velden)('.$name.'{1,70}) ('.$ete.') (.*)/', $info, $matches)) { } // Eerder geprobeerd met: if (preg_match('/(alle andere velden)('.$swift.'{1,70}) ('.$ete.') (.*)/', $info, $matches)) { } // maar toen ging het iets te vaak fout... |
Op zich werkt het, ware het niet dat ik een subset voor de <naam> gebruik en dus geen namen met getallen kan uitlezen.
Heeft iemand hier een betere ingeving dan ik ? (vast wel)
[ Voor 6% gewijzigd door MichielioZ op 29-11-2013 19:16 ]
Iedereen wil terug naar de natuur, maar niemand wil lopend...