# Validieren der eingebenen UST-ID

**URL:** <https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123>\
**Category:** Shopware 6 (German)\
**Created:** [26. Februar 2024 um 14:14 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123 "2024-02-26T14:14:27Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![raymond-de](https://avatars.discourse-cdn.com/v4/letter/r/7feea3/32.png) [@raymond-de](https://forum.shopware.com/u/raymond-de)\
**Post date:** [26. Februar 2024 um 14:14 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/1 "2024-02-26T14:14:27Z")

</div>

Hallo zusammen,

wir haben ab und an das Problem das Kunden die UST-ID ohne fehlendem Länderkenner eingibt. Wie kann man das am besten verhindert? Es sollte auch sehr sicher sein, also wenn der Kunde hin und herspringt in dem Registrierungsprozess sollte das immer geprüft werden. Wir brauchen die Nummer mit führendem Länderkenner.

Shopware 6.5.5.2

---

<div class="post-metadata">

**Author:** ![gaxweb](https://avatars.discourse-cdn.com/v4/letter/g/ea5d25/32.png) [@gaxweb](https://forum.shopware.com/u/gaxweb)\
**Post date:** [26. Februar 2024 um 14:45 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/2 "2024-02-26T14:45:53Z")

</div>

In den Ländereinstellungen für DE gibt’s einen Haken „USt-ID-Format überprüfen“, falls dir das ausreicht.

---

<div class="post-metadata">

**Author:** ![raymond-de](https://avatars.discourse-cdn.com/v4/letter/r/7feea3/32.png) [@raymond-de](https://forum.shopware.com/u/raymond-de)\
**Post date:** [26. Februar 2024 um 14:52 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/3 "2024-02-26T14:52:18Z")

</div>

Ist gesetzt. Trotzdem schaffen es die Kunden trotzdem mit Nummern ohne führendem Länderkenner durchzukommen, bzw. die Registrierung ohne Länderkenner abzuschließen.

---

<div class="post-metadata">

**Author:** ![shop43](https://avatars.discourse-cdn.com/v4/letter/s/58956e/32.png) [@shop43](https://forum.shopware.com/u/shop43)\
**Post date:** [28. August 2024 um 06:57 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/4 "2024-08-28T06:57:47Z")

</div>

Gibt es hierzu schon eine Lösung? Hab gesehen, dass das Shopware Plugin nicht für SW6 ist.

---

<div class="post-metadata">

**Author:** ![raymond-de](https://avatars.discourse-cdn.com/v4/letter/r/7feea3/32.png) [@raymond-de](https://forum.shopware.com/u/raymond-de)\
**Post date:** [4. November 2024 um 17:57 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/5 "2024-11-04T17:57:57Z")

</div>

Ich finde das Ticket nicht, aber mit irgendeinem Shopware 6.6.x soll es behoben worden sein. Testen kann ich es nicht, da wir noch auf 6.5.8.6 sind.

---

<div class="post-metadata">

**Author:** ![frip-tech.de](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/frip-tech.de/32/24453_2.png) [@frip-tech.de](https://forum.shopware.com/u/frip-tech.de)\
**Post date:** [5. November 2024 um 12:38 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/6 "2024-11-05T12:38:56Z")

</div>

Im Shopware-Standard findet lediglich eine Plausibilitätsprüfung statt. Andere Plugins bieten eine echte Anbindung an die zentrale Dateninstanz in Europa.

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [5. November 2024 um 13:28 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/7 "2024-11-05T13:28:56Z")

</div>

Wobei die Plausibilitätsprüfung ja auch das Vorhandensein der zwei Buchstaben prüfen sollte, oder?

---

<div class="post-metadata">

**Author:** ![frip-tech.de](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/frip-tech.de/32/24453_2.png) [@frip-tech.de](https://forum.shopware.com/u/frip-tech.de)\
**Post date:** [5. November 2024 um 15:57 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/8 "2024-11-05T15:57:28Z")

</div>

ja, aber wenn Du wirklich auf eine händische Prüfung verzichten willst, führt ohnehin kein Weg an einem Plugin mit Schnittstelle vorbei. Die Händler tragen ja auch Leerzeichen ein.

 ![image](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/9/4/9474632882a12b5bed2614c53c168221fd0c28ac.png)

---

<div class="post-metadata">

**Author:** ![raymond-de](https://avatars.discourse-cdn.com/v4/letter/r/7feea3/32.png) [@raymond-de](https://forum.shopware.com/u/raymond-de)\
**Post date:** [5. November 2024 um 19:29 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/9 "2024-11-05T19:29:20Z")

</div>

> [@frip-tech.de](#):
>
> Im Shopware-Standard findet lediglich eine Plausibilitätsprüfung statt.

Naja, bei uns ist es so, dass die UST-ID auch akzeptiert wird, wenn die Länderkennung davor fehlt (in Shopware 6.5.8.6). Das verwirft zurecht unser ERP! Das hat nichts mit Plausibilitätsprüfung zu tun. Es sollte einfach mal die Definition von [Umsatzsteuer-Identifikationsnummer – Wikipedia](https://de.wikipedia.org/wiki/Umsatzsteuer-Identifikationsnummer#Aufbau_der_Identifikationsnummer) beachtet werden. Gerne kann per Plugin auch noch tiefer gegangen werden, ob die UST-ID auch zum eingegeben Unternehmensstandort passt. Uns würde schon reichen, wenn laut Definition auf [Umsatzsteuer-Identifikationsnummer – Wikipedia](https://de.wikipedia.org/wiki/Umsatzsteuer-Identifikationsnummer#Aufbau_der_Identifikationsnummer) korrekt funktionieren würde.

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [6. November 2024 um 11:25 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/10 "2024-11-06T11:25:05Z")

</div>

Habs mir mal genauer angesehen: Im 6.5 waren die Validierungsmuster noch so:

```auto
(DE)?[0-9]{9}

```

im 6.6 aber so

```auto
DE\d{9}

```

Für die, die keine „regex“ sprechen: Bei der alten Variante sind die beiden ersten Buchstaben optional, bei der neuen nicht mehr. Also am besten in der DB das Feld „vat\_id\_pattern“ in country anpassen, da es, soweit ich sehen kann, dafür kein Feld im Admin gibt.

---

<div class="post-metadata">

**Author:** ![frip-tech.de](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/frip-tech.de/32/24453_2.png) [@frip-tech.de](https://forum.shopware.com/u/frip-tech.de)\
**Post date:** [6. November 2024 um 19:33 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/11 "2024-11-06T19:33:53Z")

</div>

Danke für die Klärung!

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [7. November 2024 um 23:16 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/12 "2024-11-07T23:16:38Z")

</div>

Wer sein 6.5 auf die Pattern von 6.6 ändern möchte, hier mal die Datenbankanweisungen dafür:

```auto
UPDATE country SET vat_id_pattern="DE\\d{9}" WHERE iso="DE"; 
UPDATE country SET vat_id_pattern="(EL|GR)?[0-9]{9}" WHERE iso="GR";
UPDATE country SET vat_id_pattern="(GB)?([0-9]{9}([0-9]{3})?|[A-Z]{2}[0-9]{3})" WHERE iso="GB";
UPDATE country SET vat_id_pattern="IE\\d{7}[A-WY][A-I]?|IE[0-9+][A-Z+][0-9]{5}[A-WY]" WHERE iso="IE";
UPDATE country SET vat_id_pattern="IT\\d{11}" WHERE iso="IT";
UPDATE country SET vat_id_pattern="LU\\d{8}" WHERE iso="LU";
UPDATE country SET vat_id_pattern="NL\\d{9}B\\d{2}" WHERE iso="NL";
UPDATE country SET vat_id_pattern="ATU\\d{8}" WHERE iso="AT";
UPDATE country SET vat_id_pattern="PT\\d{9}" WHERE iso="PT";
UPDATE country SET vat_id_pattern="SE\\d{12}" WHERE iso="SE";
UPDATE country SET vat_id_pattern="ES[A-Z]\\d{7}[A-Z]$|^ES[A-Z][0-9]{7}[0-9A-Z]$|^ES[0-9]{8}[A-Z]" WHERE iso="ES";
UPDATE country SET vat_id_pattern="PL\\d{10}" WHERE iso="PL";
UPDATE country SET vat_id_pattern="HU\\d{8}" WHERE iso="HU";
UPDATE country SET vat_id_pattern="CZ\\d{8,10}" WHERE iso="CZ";
UPDATE country SET vat_id_pattern="SK\\d{10}" WHERE iso="SK";
UPDATE country SET vat_id_pattern="RO\\d{2,10}" WHERE iso="RO";
UPDATE country SET vat_id_pattern="BE0\\d{9}" WHERE iso="BE";
UPDATE country SET vat_id_pattern="DK\\d{8}" WHERE iso="DK";
UPDATE country SET vat_id_pattern="FI\\d{8}" WHERE iso="FI";
UPDATE country SET vat_id_pattern="FR[A-HJ-NP-Z0-9]{2}\\d{9}" WHERE iso="FR";
UPDATE country SET vat_id_pattern="BG\\d{9,10}" WHERE iso="BG";
UPDATE country SET vat_id_pattern="EE\\d{9}" WHERE iso="EE";
UPDATE country SET vat_id_pattern="LV\\d{11}" WHERE iso="LV";
UPDATE country SET vat_id_pattern="LT\\d{9,12}" WHERE iso="LT";
UPDATE country SET vat_id_pattern="MT\\d{8}" WHERE iso="MT";
UPDATE country SET vat_id_pattern="SI\\d{8}" WHERE iso="SI";
UPDATE country SET vat_id_pattern="CY\\d{8}L" WHERE iso="CY";

```

Die Tabelle country sicherheitshalber vorher sichern.

---

<div class="post-metadata">

**Author:** ![mm-webconsulting](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@mm-webconsulting](https://forum.shopware.com/u/mm-webconsulting)\
**Post date:** [16. November 2024 um 09:50 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/13 "2024-11-16T09:50:32Z")

</div>

Sehe ich das richtig, dass wenn jemand ein Leezeichen nach seinem Ländercode eingibt, die Überprüfung fehlschlägt?

Hier wäre es doch äußerst sinnvoll, wenn vorher Leezeichen aus der UID entfernt werden würden.

---

<div class="post-metadata">

**Author:** ![raymond-de](https://avatars.discourse-cdn.com/v4/letter/r/7feea3/32.png) [@raymond-de](https://forum.shopware.com/u/raymond-de)\
**Post date:** [16. November 2024 um 10:36 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/14 "2024-11-16T10:36:03Z")

</div>

Das interessiert mich auch. Unser ERP würde Leerzeichen akzeptieren. Einige Kunden von uns kopieren jedoch die UST-ID von ihrer Webseite und hier sind oftmals Leerzeichen enthalten (nicht nur nach dem Ländercode).

Müssten somit dann den Fehlermeldungenstext erweitern, damit Kunden verstehen, warum die eingegebene UST-ID als ungültig angesehen wird.

Cool wäre es daher, wenn die UST-ID mit Leerzeichen eingegeben werden kann aber in Shopware dann ohne Leerzeichen geschrieben wird (Leerzeichen werden automatisch entfernt).

Kann daher nur @mm-webconsulting zustimmen.

---

<div class="post-metadata">

**Author:** ![b.david](https://avatars.discourse-cdn.com/v4/letter/b/3be4f8/32.png) [@b.david](https://forum.shopware.com/u/b.david)\
**Post date:** [16. November 2024 um 11:38 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/15 "2024-11-16T11:38:29Z")

</div>

Also wir hatten tatsächlich auch das Problem mal, ich habe aber einfach im TWIG ein Script mit eingefügt dass die Leerzeichen dann einfach entfernt. Heißt als Endkunde, kannst du zwar ein Leerzeichen eingeben aber wird direkt weggeschnitten. Auch wenn ich z.B. DE 123 4 5 678 kopiert habe als Endkunde und möchte es im UST-ID eintragen kann er das tun, nur dass dann im Feld eben alles weggeschnitten wird und somit DE12345678 stehen bleibt.

Vom Code her, waren das 3-4 Zeilen.

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [16. November 2024 um 13:00 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/16 "2024-11-16T13:00:45Z")

</div>

Da kann man mit JS ein wenig nachhelfen:

```auto
onblur="this.value=this.value.replace(/\s+/g, '');"

```

Damit werden alle Leerzeichen (auch Tabs etc) nach verlassen des Feldes entfernt.

---

<div class="post-metadata">

**Author:** ![b.david](https://avatars.discourse-cdn.com/v4/letter/b/3be4f8/32.png) [@b.david](https://forum.shopware.com/u/b.david)\
**Post date:** [17. November 2024 um 13:37 UTC](https://forum.shopware.com/t/validieren-der-eingebenen-ust-id/103123/17 "2024-11-17T13:37:46Z")

</div>

genau mit JS hab ich es auch gemacht 🙂

Einfach im TWIG den button überschrieben mit der Verbindung mittels „oninput“ und dann das script hinterher

```auto
{% block component_address_form_company_vatId_input %}
    <input type="text"
           class="form-control{% if violationPath %} is-invalid{% endif %}"
           id="vatIds"
           placeholder="{{ "address.companyVatPlaceholder"|trans|striptags }}"
           name="vatIds[]"
           value="{{ vatIdValue }}"
           oninput="trimSpaces(this)"> 
    <script>
        function trimSpaces(inputField) {
            inputField.value = inputField.value.replace(/\s+/g, '').trim();
        }
    </script>
{% endblock %}

```
