{"id":19597,"date":"2026-09-17T14:21:28","date_gmt":"2026-09-17T12:21:28","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/"},"modified":"2026-09-17T16:52:10","modified_gmt":"2026-09-17T14:52:10","slug":"isrc-iswc-barcode-lookup-musicbrainz","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/","title":{"rendered":"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz"},"content":{"rendered":"<div class=\"lw-mbq\" id=\"mbq-wurzel\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<style>\n.lw-mbq { --mbq-warn: #e8a33d; }\n:root[data-theme=\"light\"] .lw-mbq { --mbq-warn: #8f5300; }\n.lw-mbq .mbq-feld { width: 100%; box-sizing: border-box; padding: 10px 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; font-size: 1rem; }\n.lw-mbq .mbq-reihe { display: flex; flex-wrap: wrap; gap: 8px 10px; align-items: center; margin: 12px 0 0; }\n.lw-mbq .mbq-knopf { background: var(--accent, #2ba6df); color: var(--on-accent, #0b1114); border: none; padding: 11px 22px; border-radius: 6px; font-weight: 700; cursor: pointer; }\n.lw-mbq .mbq-knopf[disabled] { opacity: 0.6; cursor: default; }\n.lw-mbq .mbq-bsp { background: transparent; color: var(--text-secondary, #a0a0b0); border: 1px solid var(--border, #2a2a35); padding: 6px 10px; border-radius: 6px; cursor: pointer; font-family: monospace; font-size: 0.82rem; }\n.lw-mbq .mbq-klein { font-size: 0.84rem; color: var(--text-secondary, #a0a0b0); line-height: 1.55; }\n.lw-mbq .mbq-erkannt { font-size: 0.86rem; margin: 8px 0 0; min-height: 1.3em; line-height: 1.5; }\n.lw-mbq .mbq-ok { color: var(--ok, #7ee787); }\n.lw-mbq .mbq-fehler { color: var(--fail, #ff7b72); }\n.lw-mbq .mbq-warn { color: var(--mbq-warn); }\n.lw-mbq .mbq-kopf { display: flex; flex-wrap: wrap; gap: 4px 14px; align-items: baseline; margin: 0 0 8px; }\n.lw-mbq .mbq-typ { font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.4px; color: var(--text-secondary, #a0a0b0); }\n.lw-mbq .mbq-code { font-family: monospace; font-size: 1.12rem; font-weight: 700; color: var(--text-primary, #e8e8ee); word-break: break-all; }\n.lw-mbq .mbq-summe { font-weight: 700; font-size: 0.95rem; color: var(--text-primary, #e8e8ee); }\n.lw-mbq .mbq-karte { background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-left-width: 3px; border-radius: 8px; padding: 12px 14px; margin: 0 0 10px; }\n.lw-mbq .mbq-karte.mbq-stufe-gut { border-left-color: var(--ok, #7ee787); }\n.lw-mbq .mbq-karte.mbq-stufe-mittel { border-left-color: var(--mbq-warn); }\n.lw-mbq .mbq-karte.mbq-stufe-info { border-left-color: var(--text-secondary, #a0a0b0); }\n.lw-mbq .mbq-stufe { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.5px; font-weight: 700; margin: 0 0 3px; }\n.lw-mbq .mbq-titel { font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 1rem; overflow-wrap: anywhere; }\n.lw-mbq .mbq-unter { color: var(--text-secondary, #a0a0b0); font-size: 0.88rem; margin: 2px 0 4px; overflow-wrap: anywhere; }\n.lw-mbq table { border-collapse: collapse; width: 100%; font-size: 0.86rem; margin-top: 6px; }\n.lw-mbq th, .lw-mbq td { text-align: left; padding: 5px 12px 5px 0; border-bottom: 1px solid var(--border, #2a2a35); vertical-align: top; }\n.lw-mbq table.mbq-kv th { color: var(--text-secondary, #a0a0b0); font-weight: 400; white-space: nowrap; width: 1%; }\n.lw-mbq table.mbq-kv td { overflow-wrap: anywhere; }\n.lw-mbq table.mbq-liste th { color: var(--text-secondary, #a0a0b0); font-weight: 700; font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.4px; white-space: nowrap; }\n.lw-mbq td { color: var(--text-primary, #e8e8ee); }\n.lw-mbq .mbq-mono { font-family: monospace; }\n.lw-mbq .mbq-rollbar { overflow-x: auto; }\n.lw-mbq .mbq-rollbar table { min-width: 560px; }\n.lw-mbq .mbq-h { font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.98rem; margin: 22px 0 8px; }\n.lw-mbq .mbq-h2 { font-weight: 700; color: var(--text-secondary, #a0a0b0); font-size: 0.84rem; margin: 12px 0 2px; }\n.lw-mbq a { color: var(--accent, #2ba6df); }\n<\/style>\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 18px;\">Ob ein ISRC wirklich an der richtigen Aufnahme h\u00e4ngt, zeigt erst ein Blick in eine Datenbank. Die Abfrage schl\u00e4gt einen ISRC, eine ISWC oder einen UPC\/EAN in MusicBrainz nach, der offenen Musikdatenbank: zu einem ISRC die Aufnahmen samt Releases und verkn\u00fcpftem Werk, zu einer ISWC die Werke samt Urhebern, zu einem Barcode die Releases. Mehrfach vergebene Codes fallen dabei sofort auf.<\/p>\n<p>    <label for=\"mbq-code\" class=\"mbq-klein\" style=\"display: block; margin-bottom: 6px;\">ISRC, ISWC, UPC oder EAN (Bindestriche, Punkte und Leerzeichen werden ignoriert)<\/label><br \/>\n    <input id=\"mbq-code\" class=\"mbq-feld\" type=\"text\" maxlength=\"80\" spellcheck=\"false\" autocomplete=\"off\" placeholder=\"z. B. GBDUW0000059\"><\/p>\n<div id=\"mbq-erkannt\" data-mp-mask class=\"mbq-erkannt\" aria-live=\"polite\"><\/div>\n<div class=\"mbq-reihe\">\n        <button id=\"mbq-knopf\" type=\"button\" class=\"mbq-knopf\">In MusicBrainz nachschlagen<\/button><br \/>\n        <span class=\"mbq-klein\">Beispiele:<\/span><br \/>\n        <button type=\"button\" class=\"mbq-bsp\" data-code=\"GBDUW0000059\">GBDUW0000059<\/button><br \/>\n        <button type=\"button\" class=\"mbq-bsp\" data-code=\"T-071.495.166-2\">T-071.495.166-2<\/button><br \/>\n        <button type=\"button\" class=\"mbq-bsp\" data-code=\"724384960629\">724384960629<\/button>\n    <\/div>\n<p class=\"mbq-klein\" style=\"margin: 14px 0 0;\">Beim Klick pr\u00fcft reCAPTCHA von Google die Anfrage. Der Server dieser Website schickt nur den Code an MusicBrainz, nicht die IP-Adresse; f\u00fcr das Limit von 20 Abfragen je Stunde z\u00e4hlt er nur die IP-Adresse. Weder der Code noch die Antworten von MusicBrainz werden gespeichert.<\/p>\n<div id=\"mbq-ausgabe\" data-mp-mask style=\"margin-top: 18px;\" aria-live=\"polite\"><\/div>\n<div class=\"mbq-h\">So wird nachgeschlagen<\/div>\n<p class=\"mbq-klein\" style=\"margin: 0 0 6px;\">ISRC: MusicBrainz nennt zuerst die Aufnahmen, die den Code tragen. F\u00fcr die ersten drei l\u00e4dt die Abfrage Releases, alle ISRCs der Aufnahme und das verkn\u00fcpfte Werk samt ISWC nach. Je Abfrage nennt MusicBrainz h\u00f6chstens 25 Releases.<\/p>\n<p class=\"mbq-klein\" style=\"margin: 0 0 6px;\">ISWC: MusicBrainz nennt die Werke mit dieser ISWC, dazu die verkn\u00fcpften Personen mit ihrer Rolle und, soweit eingetragen, die Werkkennungen der Verwertungsgesellschaften.<\/p>\n<p class=\"mbq-klein\" style=\"margin: 0 0 6px;\">UPC und EAN: Barcodes findet MusicBrainz nur \u00fcber die Suche. Gez\u00e4hlt werden nur Releases, deren Barcode genau \u00fcbereinstimmt; ein UPC-A wird auch mit f\u00fchrender Null gesucht.<\/p>\n<p class=\"mbq-klein\" style=\"margin: 0 0 6px;\">Aufbau, IFPI-Pr\u00e4fixliste und Pr\u00fcfziffern im Einzelnen: <a href=\"\/blog\/de\/werkzeuge\/isrc-upc-ean-iswc-validator\/\">ISRC-, UPC\/EAN- und ISWC-Pr\u00fcfer<\/a><\/p>\n<p class=\"mbq-klein\" style=\"margin: 16px 0 0;\">Verbindliche Datenbanken der Vergabestellen: <a href=\"https:\/\/isrcsearch.ifpi.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ISRC Search (IFPI)<\/a> \u00b7 <a href=\"https:\/\/iswcnet.cisac.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ISWC Network (CISAC)<\/a><\/p>\n<p class=\"mbq-klein\" style=\"margin: 10px 0 0;\">Quellen: <a href=\"https:\/\/musicbrainz.org\/doc\/MusicBrainz_API\" target=\"_blank\" rel=\"noopener noreferrer\">MusicBrainz API<\/a> \u00b7 <a href=\"https:\/\/musicbrainz.org\/doc\/MusicBrainz_API\/Rate_Limiting\" target=\"_blank\" rel=\"noopener noreferrer\">MusicBrainz API: Rate Limiting<\/a> \u00b7 <a href=\"https:\/\/musicbrainz.org\/doc\/MusicBrainz_Database\" target=\"_blank\" rel=\"noopener noreferrer\">MusicBrainz Database (core data, CC0)<\/a> \u00b7 <a href=\"https:\/\/musicbrainz.org\/doc\/Style\/Recording\" target=\"_blank\" rel=\"noopener noreferrer\">MusicBrainz Style: Recording<\/a> \u00b7 <a href=\"https:\/\/isrc.ifpi.org\/faqs\" target=\"_blank\" rel=\"noopener noreferrer\">ISRC FAQ (IFPI)<\/a> \u00b7 <a href=\"https:\/\/isrc.ifpi.org\/images\/downloads\/ISRC_Handbook.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">ISRC Handbook, 4th Edition (IFPI)<\/a> \u00b7 <a href=\"https:\/\/www.iswc.org\/iswc\" target=\"_blank\" rel=\"noopener noreferrer\">The ISWC (CISAC)<\/a><\/p>\n<p class=\"mbq-klein\" style=\"font-size: 0.8rem; margin: 14px 0 0;\">MusicBrainz ist eine offene, von Freiwilligen gepflegte Datenbank; die Kerndaten stehen unter CC0. Was dort fehlt, kann trotzdem vergeben sein, und Eintr\u00e4ge k\u00f6nnen Fehler enthalten. Verbindlich sind die vergebende ISRC-Agentur, die ISWC-Stelle und der Vertrieb.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"sprache\":\"de\",\"locale\":\"de-DE\",\"einleitung\":\"Ob ein ISRC wirklich an der richtigen Aufnahme h\u00e4ngt, zeigt erst ein Blick in eine Datenbank. Die Abfrage schl\u00e4gt einen ISRC, eine ISWC oder einen UPC\\\/EAN in MusicBrainz nach, der offenen Musikdatenbank: zu einem ISRC die Aufnahmen samt Releases und verkn\u00fcpftem Werk, zu einer ISWC die Werke samt Urhebern, zu einem Barcode die Releases. Mehrfach vergebene Codes fallen dabei sofort auf.\",\"label_code\":\"ISRC, ISWC, UPC oder EAN (Bindestriche, Punkte und Leerzeichen werden ignoriert)\",\"platzhalter\":\"z. B. GBDUW0000059\",\"knopf\":\"In MusicBrainz nachschlagen\",\"beispiele\":\"Beispiele:\",\"datenschutz\":\"Beim Klick pr\u00fcft reCAPTCHA von Google die Anfrage. Der Server dieser Website schickt nur den Code an MusicBrainz, nicht die IP-Adresse; f\u00fcr das Limit von 20 Abfragen je Stunde z\u00e4hlt er nur die IP-Adresse. Weder der Code noch die Antworten von MusicBrainz werden gespeichert.\",\"laeuft\":\"MusicBrainz wird abgefragt \u2026\",\"erkannt_isrc\":\"ISRC erkannt: {anzeige}\",\"erkannt_iswc\":\"ISWC erkannt: {anzeige}\",\"erkannt_upc\":\"UPC-A erkannt: {anzeige}; gesucht wird auch 0{anzeige}\",\"erkannt_ean\":\"EAN-13 erkannt: {anzeige}\",\"grund_unbekannt\":\"Kein ISRC, keine ISWC und kein UPC oder EAN erkannt. Ein ISRC hat 12 Zeichen wie GBDUW0000059, eine ISWC hat die Form T-071.495.166-2, ein UPC 12 und ein EAN 13 Ziffern.\",\"grund_laenge\":\"{n} Ziffern passen weder zu UPC-A (12) noch zu EAN-13 (13).\",\"grund_pruefziffer\":\"Die Pr\u00fcfziffer von {anzeige} stimmt nicht, richtig w\u00e4re {soll}. Meist steckt der Fehler in einer der anderen Ziffern; nachgeschlagen wird nur ein Code mit g\u00fcltiger Pr\u00fcfziffer.\",\"grund_iswc_null\":\"Die Werknummer 000000000 ist in einer ISWC nicht zul\u00e4ssig.\",\"typ_isrc\":\"ISRC\",\"typ_iswc\":\"ISWC\",\"typ_upc\":\"UPC-A\",\"typ_ean\":\"EAN-13\",\"summe_aufnahmen_0\":\"keine Aufnahme in MusicBrainz\",\"summe_aufnahmen_1\":\"1 Aufnahme\",\"summe_aufnahmen_n\":\"{n} Aufnahmen\",\"summe_werke_0\":\"kein Werk in MusicBrainz\",\"summe_werke_1\":\"1 Werk\",\"summe_werke_n\":\"{n} Werke\",\"summe_releases_0\":\"kein Release in MusicBrainz\",\"summe_releases_1\":\"1 Release\",\"summe_releases_n\":\"{n} Releases\",\"zeile_quelle\":\"In MusicBrainz\",\"link_quelle\":\"Seite \u00f6ffnen\",\"zeile_stand\":\"Stand der Daten\",\"aus_speicher\":\"aus dem Zwischenspeicher\",\"zeile_limit\":\"Abfragen in dieser Stunde \u00fcbrig\",\"h_befunde\":\"Hinweise\",\"h_aufnahmen\":\"Aufnahmen\",\"h_werke\":\"Werke\",\"h_releases\":\"Releases\",\"stufe_mittel\":\"Pr\u00fcfen\",\"stufe_info\":\"Hinweis\",\"stufe_gut\":\"In Ordnung\",\"feld_laenge\":\"L\u00e4nge\",\"feld_erst\":\"Erstver\u00f6ffentlichung\",\"feld_isrcs\":\"ISRCs der Aufnahme\",\"feld_werk\":\"Werk\",\"feld_video\":\"Video\",\"ja\":\"ja\",\"ohne_details\":\"Releases und Werk wurden f\u00fcr diese Aufnahme nicht nachgeladen.\",\"ohne_titel\":\"(ohne Titel)\",\"feld_iswcs\":\"ISWCs\",\"feld_urheber\":\"Urheber\",\"feld_kennungen\":\"Kennungen\",\"feld_sprachen\":\"Sprache\",\"kennungen_mehr\":\"und {n} weitere\",\"releases_anzahl\":\"Releases mit dieser Aufnahme: {n}\",\"releases_grenze\":\"Releases mit dieser Aufnahme: mindestens {n}. MusicBrainz nennt je Abfrage h\u00f6chstens 25; alle stehen auf der Seite der Aufnahme.\",\"sp_titel\":\"Titel\",\"sp_kuenstler\":\"K\u00fcnstler\",\"sp_datum\":\"Datum\",\"sp_land\":\"Land\",\"sp_label\":\"Label \u00b7 Katalognummer\",\"sp_format\":\"Format\",\"sp_titelzahl\":\"Tracks\",\"sp_status\":\"Status\",\"sp_barcode\":\"Barcode\",\"land_XE\":\"Europa\",\"land_XW\":\"weltweit\",\"land_XU\":\"unbekannt\",\"sprache_zxx\":\"ohne Text\",\"sprache_mul\":\"mehrsprachig\",\"rolle_writer\":\"Songwriting\",\"rolle_composer\":\"Musik\",\"rolle_lyricist\":\"Text\",\"rolle_arranger\":\"Arrangement\",\"rolle_translator\":\"\u00dcbersetzung\",\"rolle_librettist\":\"Libretto\",\"rolle_orchestrator\":\"Orchestrierung\",\"status_official\":\"offiziell\",\"status_promotion\":\"Promo\",\"status_bootleg\":\"Bootleg\",\"status_pseudo_release\":\"Pseudo-Release\",\"status_withdrawn\":\"zur\u00fcckgezogen\",\"status_cancelled\":\"abgesagt\",\"art_album\":\"Album\",\"art_single\":\"Single\",\"art_ep\":\"EP\",\"art_broadcast\":\"Sendung\",\"art_other\":\"Sonstiges\",\"werktyp_song\":\"Song\",\"werktyp_soundtrack\":\"Soundtrack\",\"werktyp_symphony\":\"Sinfonie\",\"werktyp_opera\":\"Oper\",\"werktyp_musical\":\"Musical\",\"werktyp_concerto\":\"Konzert\",\"werktyp_sonata\":\"Sonate\",\"werktyp_suite\":\"Suite\",\"befund_isrc_nicht_gefunden\":\"Kein Eintrag in MusicBrainz || MusicBrainz kennt den ISRC {code} nicht. Ung\u00fcltig ist er deshalb nicht: Die Datenbank pflegen Freiwillige, und ein ISRC steht nur darin, wenn ihn jemand eingetragen oder von einer CD oder einem Streamingdienst \u00fcbernommen hat.\",\"befund_isrc_eine_aufnahme\":\"Genau eine Aufnahme || In MusicBrainz tr\u00e4gt genau eine Aufnahme diesen ISRC. So ist es vorgesehen: Laut IFPI darf ein ISRC unter keinen Umst\u00e4nden wiederverwendet werden.\",\"befund_isrc_mehrere_aufnahmen\":\"{n} Aufnahmen mit demselben ISRC || Laut IFPI darf ein ISRC unter keinen Umst\u00e4nden wiederverwendet werden, und Remixe oder Edits brauchen einen eigenen. Mehrere Treffer deuten auf einen erneut vergebenen Code, eine falsche Zuordnung beim Eintragen oder doppelte Eintr\u00e4ge in MusicBrainz; Titel und L\u00e4nge der Aufnahmen zeigen meist, welcher Fall vorliegt. Ist ein ISRC tats\u00e4chlich zwei Aufnahmen zugeteilt, bekommt nach Anhang A.13.3 des ISRC-Handbuchs eine oder beide einen neuen.\",\"befund_aufnahme_video\":\"Als Video eingetragen: {titel} || Laut IFPI sind Musikvideo und Tonaufnahme verschiedene Aufnahmen, auch bei gleichem Ton, und brauchen je einen eigenen ISRC.\",\"befund_aufnahme_mehrere_isrcs\":\"{n} ISRCs an einer Aufnahme: {titel} || MusicBrainz verkn\u00fcpft die Aufnahme mit {liste}. Remasterte Fassungen f\u00fchrt MusicBrainz als dieselbe Aufnahme; laut ISRC-Handbuch braucht ein Remaster aber nur bei kreativem Eingriff einen neuen Code. Wurden einer Aufnahme versehentlich mehrere ISRCs gegeben, w\u00e4hlt der Vergebende nach Anhang A.13.2 einen bevorzugten und verwendet die \u00fcbrigen nicht mehr.\",\"befund_aufnahme_ohne_werk\":\"Kein Werk verkn\u00fcpft: {titel} || In MusicBrainz h\u00e4ngt an der Aufnahme kein Werk, \u00fcber diesen Weg f\u00fchrt also nichts zu einer ISWC. Die ISWC kennzeichnet die Komposition, nicht die Aufnahme.\",\"befund_werk_ohne_iswc\":\"Werk ohne ISWC: {titel} || Das verkn\u00fcpfte Werk hat in MusicBrainz keine ISWC. Entweder wurde keine vergeben, oder sie ist nicht eingetragen.\",\"befund_details_unvollstaendig\":\"Details unvollst\u00e4ndig || Beim Nachladen von Releases und Werken war MusicBrainz ausgelastet. Aufnahmen ohne diese Angaben: {n}. Eine neue Abfrage in einigen Minuten holt sie nach.\",\"befund_details_gekappt\":\"Details f\u00fcr die ersten {max} Aufnahmen || Releases und Werke werden f\u00fcr h\u00f6chstens {max} von {n} Aufnahmen nachgeladen, damit MusicBrainz nicht mit Folgeabfragen belastet wird.\",\"befund_iswc_nicht_gefunden\":\"Kein Eintrag in MusicBrainz || MusicBrainz kennt die ISWC {code} nicht. \u00dcber ihre G\u00fcltigkeit sagt das nichts: Werke und ISWCs tragen Freiwillige ein.\",\"befund_iswc_ein_werk\":\"Genau ein Werk || In MusicBrainz tr\u00e4gt genau ein Werk diese ISWC. So ist es vorgesehen: Laut ISWC-Stelle kennzeichnet eine ISWC jedes Musikwerk eindeutig.\",\"befund_iswc_mehrere_werke\":\"{n} Werke mit derselben ISWC || Eine ISWC kennzeichnet genau ein Musikwerk. Mehrere Treffer deuten auf doppelte Werkeintr\u00e4ge in MusicBrainz oder eine falsch zugeordnete ISWC.\",\"befund_werk_mehrere_iswcs\":\"{n} ISWCs an einem Werk: {titel} || MusicBrainz verkn\u00fcpft das Werk mit {liste}. Laut ISWC-Stelle lassen sich irrt\u00fcmlich vergebene ISWCs inzwischen zusammenf\u00fchren oder trennen.\",\"befund_werk_ohne_urheber\":\"Keine Urheber eingetragen: {titel} || In MusicBrainz ist mit diesem Werk keine Person f\u00fcr Musik oder Text verkn\u00fcpft.\",\"befund_barcode_nicht_gefunden\":\"Kein Release mit diesem Barcode || MusicBrainz kennt kein Release mit {code}. Bei einem UPC-A und bei einem EAN-13 mit f\u00fchrender Null wird auch die jeweils andere Schreibweise gesucht. Ung\u00fcltig ist der Barcode deshalb nicht; Aufbau und Pr\u00fcfziffer pr\u00fcft der Code-Pr\u00fcfer.\",\"befund_barcode_ein_release\":\"Genau ein Release || In MusicBrainz tr\u00e4gt genau ein Release diesen Barcode.\",\"befund_barcode_mehrere_releases\":\"{n} Releases mit demselben Barcode || Das kommt etwa vor, wenn Ausgaben f\u00fcr verschiedene L\u00e4nder dieselbe Nummer tragen. Land, Datum und Katalognummer in der Tabelle zeigen die Unterschiede.\",\"befund_barcode_mehr_treffer\":\"Mehr als {max} Treffer || Die Suche liefert h\u00f6chstens {max} Releases; die \u00fcbrigen stehen auf der Suchseite von MusicBrainz.\",\"fehler_methode\":\"Falsche Anfragemethode.\",\"fehler_eingabe\":\"Die Anfrage lie\u00df sich nicht lesen.\",\"fehler_kein_token\":\"Die Abfrage lie\u00df sich nicht starten, weil reCAPTCHA nicht geladen hat.\",\"fehler_captcha\":\"reCAPTCHA hat die Anfrage als automatisiert eingestuft. Ein Neuladen der Seite hilft meist.\",\"fehler_pruefdienst\":\"Der reCAPTCHA-Dienst war nicht erreichbar.\",\"fehler_aufbau\":\"Der Dienst ist nicht richtig eingerichtet. Der Fehler liegt auf dieser Seite.\",\"fehler_zaehler\":\"Der Z\u00e4hler ist nicht erreichbar, deshalb wurde nichts abgefragt.\",\"fehler_zu_viele\":\"Das Limit von {limit} Abfragen je Stunde f\u00fcr diese Adresse ist erreicht.\",\"fehler_code\":\"Der Code lie\u00df sich nicht lesen.\",\"fehler_ausgelastet\":\"MusicBrainz ist gerade ausgelastet und hat die Anfrage abgewiesen. Eine neue Abfrage in einigen Minuten gelingt meist.\",\"fehler_netz\":\"Der Dienst war nicht erreichbar.\",\"fehler_musicbrainz\":\"MusicBrainz hat unerwartet geantwortet (Status {status}).\",\"fehler_antwort\":\"Die Antwort lie\u00df sich nicht lesen.\",\"fehler_abgeschaltet\":\"Die Abfrage ist derzeit abgeschaltet.\",\"fehler_unbekannt\":\"Es ist etwas schiefgegangen, wof\u00fcr es keine eigene Meldung gibt.\",\"h_ablauf\":\"So wird nachgeschlagen\",\"erkl_isrc\":\"ISRC: MusicBrainz nennt zuerst die Aufnahmen, die den Code tragen. F\u00fcr die ersten drei l\u00e4dt die Abfrage Releases, alle ISRCs der Aufnahme und das verkn\u00fcpfte Werk samt ISWC nach. Je Abfrage nennt MusicBrainz h\u00f6chstens 25 Releases.\",\"erkl_iswc\":\"ISWC: MusicBrainz nennt die Werke mit dieser ISWC, dazu die verkn\u00fcpften Personen mit ihrer Rolle und, soweit eingetragen, die Werkkennungen der Verwertungsgesellschaften.\",\"erkl_barcode\":\"UPC und EAN: Barcodes findet MusicBrainz nur \u00fcber die Suche. Gez\u00e4hlt werden nur Releases, deren Barcode genau \u00fcbereinstimmt; ein UPC-A wird auch mit f\u00fchrender Null gesucht.\",\"erkl_pruefer\":\"Aufbau, IFPI-Pr\u00e4fixliste und Pr\u00fcfziffern im Einzelnen:\",\"link_pruefer\":\"ISRC-, UPC\\\/EAN- und ISWC-Pr\u00fcfer\",\"url_pruefer\":\"\\\/blog\\\/de\\\/werkzeuge\\\/isrc-upc-ean-iswc-validator\\\/\",\"offiziell\":\"Verbindliche Datenbanken der Vergabestellen:\",\"quellen_titel\":\"Quellen\",\"grenze\":\"MusicBrainz ist eine offene, von Freiwilligen gepflegte Datenbank; die Kerndaten stehen unter CC0. Was dort fehlt, kann trotzdem vergeben sein, und Eintr\u00e4ge k\u00f6nnen Fehler enthalten. Verbindlich sind die vergebende ISRC-Agentur, die ISWC-Stelle und der Vertrieb.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-mbabfrage.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var MB = 'https:\/\/musicbrainz.org\/';\n    var STUFEN = ['mittel', 'info', 'gut'];\n    var ISRC = \/^[A-Z]{2}[A-Z0-9]{3}\\d{7}$\/;\n    var ISWC_FORM = \/^T-\\d{3}\\.\\d{3}\\.\\d{3}-\\d$\/;\n    var SPRACHCODES = { eng: 'en', deu: 'de', ger: 'de', pol: 'pl', fra: 'fr', fre: 'fr', spa: 'es', ita: 'it', por: 'pt', nld: 'nl', dut: 'nl',\n        swe: 'sv', nor: 'no', dan: 'da', fin: 'fi', jpn: 'ja', kor: 'ko', zho: 'zh', chi: 'zh', rus: 'ru', ukr: 'uk', ces: 'cs', cze: 'cs',\n        tur: 'tr', ell: 'el', gre: 'el', hun: 'hu', ron: 'ro', rum: 'ro', ara: 'ar', heb: 'he', hin: 'hi', lat: 'la', gle: 'ga', cym: 'cy', wel: 'cy' };<\/p>\n<p>    \/\/ --- Texte ------------------------------------------------------------------\n    function text(schluessel, daten) {\n        var t = T[schluessel];\n        if (typeof t !== 'string') { return null; }\n        return t.replace(\/\\{([a-z_0-9]+)\\}\/g, function (m, k) {\n            return (daten && daten[k] !== undefined && daten[k] !== null) ? String(daten[k]) : m;\n        });\n    }<\/p>\n<p>    \/\/ --- Codes lesen: dieselben Regeln wie lw_mb_code_lesen() auf dem Server -------\n    function gs1Pruefziffer(ohne) {\n        var summe = 0;\n        for (var i = ohne.length - 1, faktor = 3; i >= 0; i--, faktor = faktor === 3 ? 1 : 3) {\n            summe += (ohne.charCodeAt(i) - 48) * faktor;\n        }\n        return (10 - summe % 10) % 10;\n    }\n    function iswcPruefziffer(neun) {\n        var summe = 1;\n        for (var i = 0; i < 9; i++) { summe += (i + 1) * (neun.charCodeAt(i) - 48); }\n        return (10 - summe % 10) % 10;\n    }\n    function lesen(roh) {\n        var aus = { typ: null, code: null, anzeige: null, fehler: null, soll: null, n: null };\n        if (typeof roh !== 'string' || roh.trim() === '' || roh.length > 80) { aus.fehler = 'unbekannt'; return aus; }\n        var gross = roh.trim().toUpperCase();\n        var trenner = \/[\\s.\\-_\\u2010-\\u2015]\/g;\n        var voll = gross.replace(trenner, '');\n        var gekuerzt = gross.replace(\/^(ISRC|ISWC|UPC|EAN|GTIN)[\\s:\\-]*\/, '').replace(trenner, '');\n        \/\/ Vorsaetze fallen weg - ausser die Eingabe ist mit ihnen schon ein gueltig geformter Code\n        var c = \/^(T\\d{10}|\\d{12,13}|[A-Z]{2}[A-Z0-9]{3}\\d{7})$\/.test(voll) ? voll : gekuerzt;\n        if (c === '') { aus.fehler = 'unbekannt'; return aus; }\n        if (\/^T\\d{10}$\/.test(c)) {\n            var neun = c.slice(1, 10), gegeben = c.charCodeAt(10) - 48;\n            aus.typ = 'iswc';\n            aus.anzeige = 'T-' + neun.slice(0, 3) + '.' + neun.slice(3, 6) + '.' + neun.slice(6, 9) + '-' + gegeben;\n            if (neun === '000000000') { aus.fehler = 'iswc_null'; return aus; }\n            var soll = iswcPruefziffer(neun);\n            if (gegeben !== soll) { aus.fehler = 'pruefziffer'; aus.soll = soll; return aus; }\n            aus.code = c;\n            return aus;\n        }\n        if (\/^\\d+$\/.test(c)) {\n            var n = c.length;\n            if (n !== 12 && n !== 13) { aus.fehler = 'laenge'; aus.n = n; return aus; }\n            aus.typ = n === 12 ? 'upc' : 'ean';\n            aus.anzeige = c;\n            var soll2 = gs1Pruefziffer(c.slice(0, -1));\n            if (c.charCodeAt(n - 1) - 48 !== soll2) { aus.fehler = 'pruefziffer'; aus.soll = soll2; return aus; }\n            aus.code = c;\n            return aus;\n        }\n        if (ISRC.test(c)) {\n            aus.typ = 'isrc';\n            aus.code = c;\n            aus.anzeige = c.slice(0, 2) + '-' + c.slice(2, 5) + '-' + c.slice(5, 7) + '-' + c.slice(7);\n            return aus;\n        }\n        aus.fehler = 'unbekannt';\n        return aus;\n    }<\/p>\n<p>    \/\/ --- Antwort des Servers pruefen ----------------------------------------------\n    function liste(w) { return Array.isArray(w) ? w : []; }\n    function zahl(w) { return (typeof w === 'number' && isFinite(w)) ? w : null; }\n    function zk(w, max) { return typeof w === 'string' ? w.slice(0, max || 300) : ''; }\n    function muster(w, re) { return (typeof w === 'string' && re.test(w)) ? w : ''; }\n    function mbUrl(w) { return (typeof w === 'string' && w.indexOf(MB) === 0 && !\/[\\s\"'<>\\\\]\/.test(w)) ? w : ''; }\n    function codes(w, re) {\n        var aus = [];\n        liste(w).forEach(function (x) { if (typeof x === 'string' && re.test(x) && aus.indexOf(x) === -1 && aus.length < 20) { aus.push(x); } });\n        return aus;\n    }\n    var DATUM = \/^\\d{4}(-\\d{2}(-\\d{2})?)?$\/;\n    var SCHLUESSEL = \/^[a-z0-9_]{1,40}$\/;\n\n    function release(r) {\n        r = (r &#038;&#038; typeof r === 'object') ? r : {};\n        return {\n            titel: zk(r.titel), kuenstler: zk(r.kuenstler), datum: muster(r.datum, DATUM), land: muster(r.land, \/^[A-Z]{2}$\/),\n            status: muster(r.status, SCHLUESSEL), barcode: muster(r.barcode, \/^\\d{1,20}$\/),\n            labels: liste(r.labels).filter(function (x) { return typeof x === 'string'; }).map(function (x) { return x.slice(0, 200); }).slice(0, 3),\n            formate: zk(r.formate, 120), titelzahl: zahl(r.titelzahl), art: muster(r.art, SCHLUESSEL), url: mbUrl(r.url)\n        };\n    }\n    function aufnahme(a) {\n        a = (a &#038;&#038; typeof a === 'object') ? a : {};\n        return {\n            titel: zk(a.titel), kuenstler: zk(a.kuenstler), zusatz: zk(a.zusatz, 200), laengeMs: zahl(a.laenge_ms),\n            erst: muster(a.erstveroeffentlichung, DATUM), video: a.video === true, url: mbUrl(a.url), details: a.details === true,\n            isrcs: codes(a.isrcs, ISRC),\n            werke: liste(a.werke).slice(0, 10).map(function (w) {\n                w = (w &#038;&#038; typeof w === 'object') ? w : {};\n                return { titel: zk(w.titel), iswcs: codes(w.iswcs, ISWC_FORM), url: mbUrl(w.url) };\n            }),\n            releases: liste(a.releases).slice(0, 25).map(release),\n            releasesGesamt: zahl(a.releases_gesamt) || 0, releasesGrenze: a.releases_grenze === true\n        };\n    }\n    function werk(w) {\n        w = (w &#038;&#038; typeof w === 'object') ? w : {};\n        return {\n            titel: zk(w.titel), zusatz: zk(w.zusatz, 200), typ: muster(w.typ, SCHLUESSEL),\n            sprachen: codes(w.sprachen, \/^[a-z]{3}$\/), iswcs: codes(w.iswcs, ISWC_FORM),\n            urheber: liste(w.urheber).slice(0, 20).map(function (u) {\n                u = (u &#038;&#038; typeof u === 'object') ? u : {};\n                return { name: zk(u.name, 120), rolle: muster(u.rolle, SCHLUESSEL) };\n            }).filter(function (u) { return u.name !== ''; }),\n            kennungen: liste(w.kennungen).slice(0, 12).map(function (k) {\n                k = (k &#038;&#038; typeof k === 'object') ? k : {};\n                return { typ: zk(k.typ, 60), wert: zk(k.wert, 60) };\n            }).filter(function (k) { return k.typ !== '' &#038;&#038; k.wert !== ''; }),\n            kennungenGesamt: zahl(w.kennungen_gesamt) || 0, url: mbUrl(w.url)\n        };\n    }\n    function befund(b) {\n        b = (b &#038;&#038; typeof b === 'object') ? b : {};\n        var daten = {};\n        if (b.daten &#038;&#038; typeof b.daten === 'object') {\n            Object.keys(b.daten).forEach(function (k) {\n                var v = b.daten[k];\n                if (typeof v === 'string') { daten[k] = v.slice(0, 400); } else if (zahl(v) !== null) { daten[k] = v; }\n            });\n        }\n        return { key: muster(b.key, \/^[a-z_]{1,40}$\/), stufe: STUFEN.indexOf(b.stufe) === -1 ? 'info' : b.stufe, daten: daten };\n    }\n    function fehlerObjekt(a) {\n        return { fehler: String(a.fehler || 'antwort').slice(0, 40), grund: muster(a.grund, SCHLUESSEL) || null, soll: zahl(a.soll), n: zahl(a.n),\n            limit: zahl(a.limit), status: zahl(a.status), anzeige: zk(a.anzeige, 40) };\n    }\n    function bewerten(antwort) {\n        var a = (antwort &#038;&#038; typeof antwort === 'object') ? antwort : {};\n        if (a.fehler) { return fehlerObjekt(a); }\n        var typ = ['isrc', 'iswc', 'upc', 'ean'].indexOf(a.typ) === -1 ? null : a.typ;\n        if (!typ) { return fehlerObjekt({ fehler: 'antwort' }); }\n        return {\n            fehler: null, typ: typ, anzeige: zk(a.anzeige, 40), quelle: mbUrl(a.quelle),\n            aufnahmen: liste(a.aufnahmen).slice(0, 25).map(aufnahme), aufnahmenGesamt: zahl(a.aufnahmen_gesamt) || 0,\n            werke: liste(a.werke).slice(0, 10).map(werk), werkeGesamt: zahl(a.werke_gesamt) || 0,\n            releases: liste(a.releases).slice(0, 25).map(release), releasesGesamt: zahl(a.releases_gesamt) || 0,\n            befunde: liste(a.befunde).map(befund).filter(function (b) { return b.key !== ''; }),\n            zwischengespeichert: a.zwischengespeichert === true, stand: zahl(a.stand), dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }\n\n    \/\/ --- Anzeigehilfen -------------------------------------------------------------\n    function dauer(ms) {\n        if (typeof ms !== 'number' || !isFinite(ms) || ms <= 0) { return ''; }\n        var s = Math.round(ms \/ 1000), h = Math.floor(s \/ 3600), m = Math.floor((s % 3600) \/ 60), r = s % 60;\n        var rr = (r < 10 ? '0' : '') + r;\n        return h > 0 ? h + ':' + (m < 10 ? '0' : '') + m + ':' + rr : m + ':' + rr;\n    }\n    function namen(typ, code) {\n        try {\n            if (typeof Intl !== 'undefined' &#038;&#038; Intl.DisplayNames) {\n                var n = new Intl.DisplayNames([T.sprache], { type: typ }).of(code);\n                if (n &#038;&#038; n !== code) { return n; }\n            }\n        } catch (e) { \/* unbekannter Code *\/ }\n        return null;\n    }\n    function landName(code) {\n        if (!code) { return ''; }\n        return text('land_' + code) || namen('region', code) || code;\n    }\n    function sprachName(code) {\n        return text('sprache_' + code) || (SPRACHCODES[code] ? namen('language', SPRACHCODES[code]) : null) || code;\n    }\n    function rolleName(r) { return text('rolle_' + r) || String(r).replace(\/_\/g, ' '); }\n    function statusName(s) { return s ? (text('status_' + s) || s.replace(\/_\/g, ' ')) : ''; }\n    function artName(s) { return s ? (text('art_' + s) || s.replace(\/_\/g, ' ')) : ''; }\n    function zeitpunkt(ts) {\n        if (ts === null) { return ''; }\n        try { return new Date(ts * 1000).toLocaleString(T.locale, { dateStyle: 'medium', timeStyle: 'short' }); } catch (e) { return new Date(ts * 1000).toISOString(); }\n    }\n    function summe(b) {\n        var n = b.typ === 'isrc' ? b.aufnahmenGesamt : (b.typ === 'iswc' ? b.werkeGesamt : b.releasesGesamt);\n        var art = b.typ === 'isrc' ? 'aufnahmen' : (b.typ === 'iswc' ? 'werke' : 'releases');\n        return text('summe_' + art + '_' + (n === 0 ? '0' : (n === 1 ? '1' : 'n')), { n: n });\n    }\n\n    \/\/ --- Darstellung ---------------------------------------------------------------\n    function neu(tag, klasse, inhalt) {\n        var x = document.createElement(tag);\n        if (klasse) { x.className = klasse; }\n        if (inhalt !== undefined &#038;&#038; inhalt !== null) { x.textContent = inhalt; }\n        return x;\n    }\n    function verweis(url, inhalt, klasse) {\n        if (!mbUrl(url)) { return neu('span', klasse || '', inhalt); }\n        var a = neu('a', klasse || '', inhalt);\n        a.href = url;\n        a.target = '_blank';\n        a.rel = 'noopener noreferrer';\n        return a;\n    }\n    function kvTabelle(zeilen) {\n        var tab = neu('table', 'mbq-kv');\n        zeilen.forEach(function (z) {\n            if (z[1] === '' || z[1] === null || z[1] === undefined) { return; }\n            var tr = neu('tr');\n            tr.appendChild(neu('th', '', z[0]));\n            var td = neu('td', z[2] || '');\n            if (typeof z[1] === 'string') { td.textContent = z[1]; } else { td.appendChild(z[1]); }\n            tr.appendChild(td);\n            tab.appendChild(tr);\n        });\n        return tab;\n    }\n    function codeVerweise(liste, pfad) {\n        var span = neu('span', 'mbq-mono');\n        liste.forEach(function (c, i) {\n            if (i) { span.appendChild(document.createTextNode(', ')); }\n            span.appendChild(verweis(MB + pfad + c, c));\n        });\n        return span;\n    }\n    function befundKarte(f) {\n        var k = neu('div', 'mbq-karte mbq-stufe-' + f.stufe);\n        var roh = text('befund_' + f.key, f.daten) || f.key;\n        var teile = roh.split(' || ');\n        k.appendChild(neu('div', 'mbq-stufe ' + (f.stufe === 'gut' ? 'mbq-ok' : (f.stufe === 'mittel' ? 'mbq-warn' : 'mbq-klein')), T['stufe_' + f.stufe]));\n        k.appendChild(neu('div', 'mbq-titel', teile[0]));\n        if (teile[1]) { k.appendChild(neu('div', 'mbq-klein', teile[1])); }\n        return k;\n    }\n    function releaseTabelle(releases, mitBarcodeSpalten) {\n        var huelle = neu('div', 'mbq-rollbar');\n        var tab = neu('table', 'mbq-liste');\n        var kopf = neu('tr');\n        var spalten = mitBarcodeSpalten\n            ? [T.sp_titel, T.sp_kuenstler, T.sp_datum, T.sp_land, T.sp_label, T.sp_format, T.sp_titelzahl, T.sp_status]\n            : [T.sp_titel, T.sp_datum, T.sp_land, T.sp_status, T.sp_barcode];\n        spalten.forEach(function (s) { kopf.appendChild(neu('th', '', s)); });\n        tab.appendChild(kopf);\n        releases.forEach(function (r) {\n            var tr = neu('tr');\n            var t1 = neu('td');\n            t1.appendChild(verweis(r.url, r.titel || T.ohne_titel));\n            tr.appendChild(t1);\n            if (mitBarcodeSpalten) { tr.appendChild(neu('td', '', r.kuenstler)); }\n            tr.appendChild(neu('td', 'mbq-mono', r.datum || '\u2013'));\n            tr.appendChild(neu('td', '', r.land ? landName(r.land) : '\u2013'));\n            if (mitBarcodeSpalten) {\n                tr.appendChild(neu('td', '', r.labels.length ? r.labels.join(' \/ ') : '\u2013'));\n                tr.appendChild(neu('td', '', r.formate || '\u2013'));\n                tr.appendChild(neu('td', 'mbq-mono', r.titelzahl !== null ? String(r.titelzahl) : '\u2013'));\n                tr.appendChild(neu('td', '', [statusName(r.status), artName(r.art)].filter(Boolean).join(' \u00b7 ') || '\u2013'));\n            } else {\n                tr.appendChild(neu('td', '', statusName(r.status) || '\u2013'));\n                tr.appendChild(neu('td', 'mbq-mono', r.barcode || '\u2013'));\n            }\n            tab.appendChild(tr);\n        });\n        huelle.appendChild(tab);\n        return huelle;\n    }\n    function aufnahmeKarte(a) {\n        var k = neu('div', 'mbq-karte');\n        var titel = neu('div', 'mbq-titel');\n        titel.appendChild(verweis(a.url, a.titel || T.ohne_titel));\n        k.appendChild(titel);\n        var unter = [a.kuenstler, a.zusatz].filter(Boolean).join(' \u00b7 ');\n        if (unter) { k.appendChild(neu('div', 'mbq-unter', unter)); }\n        var werkZelle = '';\n        if (a.werke.length) {\n            werkZelle = neu('span');\n            a.werke.forEach(function (w, i) {\n                if (i) { werkZelle.appendChild(document.createTextNode('; ')); }\n                werkZelle.appendChild(verweis(w.url, w.titel || T.ohne_titel));\n                if (w.iswcs.length) {\n                    werkZelle.appendChild(document.createTextNode(' \u00b7 '));\n                    werkZelle.appendChild(codeVerweise(w.iswcs, 'iswc\/'));\n                }\n            });\n        }\n        k.appendChild(kvTabelle([\n            [T.feld_laenge, dauer(a.laengeMs), 'mbq-mono'],\n            [T.feld_erst, a.erst, 'mbq-mono'],\n            [T.feld_isrcs, a.isrcs.length ? codeVerweise(a.isrcs, 'isrc\/') : ''],\n            [T.feld_werk, werkZelle],\n            [T.feld_video, a.video ? T.ja : '']\n        ]));\n        if (!a.details) {\n            k.appendChild(neu('p', 'mbq-klein', T.ohne_details));\n            return k;\n        }\n        if (a.releases.length) {\n            k.appendChild(neu('div', 'mbq-h2', text(a.releasesGrenze ? 'releases_grenze' : 'releases_anzahl', { n: a.releasesGesamt })));\n            k.appendChild(releaseTabelle(a.releases, false));\n        }\n        return k;\n    }\n    function werkKarte(w) {\n        var k = neu('div', 'mbq-karte');\n        var titel = neu('div', 'mbq-titel');\n        titel.appendChild(verweis(w.url, w.titel || T.ohne_titel));\n        k.appendChild(titel);\n        var unter = [w.typ ? (text('werktyp_' + w.typ) || w.typ.replace(\/_\/g, ' ')) : '', w.zusatz].filter(Boolean).join(' \u00b7 ');\n        if (unter) { k.appendChild(neu('div', 'mbq-unter', unter)); }\n        var urheber = w.urheber.map(function (u) { return u.name + (u.rolle ? ' (' + rolleName(u.rolle) + ')' : ''); }).join('; ');\n        var kennungen = w.kennungen.map(function (x) { return x.typ + ': ' + x.wert; }).join('; ');\n        if (kennungen &#038;&#038; w.kennungenGesamt > w.kennungen.length) {\n            kennungen += ' ' + text('kennungen_mehr', { n: w.kennungenGesamt - w.kennungen.length });\n        }\n        k.appendChild(kvTabelle([\n            [T.feld_iswcs, w.iswcs.length ? codeVerweise(w.iswcs, 'iswc\/') : ''],\n            [T.feld_sprachen, w.sprachen.map(sprachName).join(', ')],\n            [T.feld_urheber, urheber],\n            [T.feld_kennungen, kennungen]\n        ]));\n        return k;\n    }<\/p>\n<p>    function darstellen(b, ziel) {\n        ziel.textContent = '';\n        if (b.fehler) {\n            var txt = null;\n            if (b.fehler === 'code' && b.grund) { txt = text('grund_' + b.grund, { soll: b.soll, n: b.n, anzeige: b.anzeige }); }\n            if (b.fehler === 'zu_viele') { txt = text('fehler_zu_viele', { limit: b.limit !== null ? b.limit : '?' }); }\n            if (b.fehler === 'musicbrainz') { txt = text('fehler_musicbrainz', { status: b.status !== null ? b.status : '?' }); }\n            if (txt === null) { txt = text('fehler_' + b.fehler) || T.fehler_unbekannt; }\n            ziel.appendChild(neu('p', 'mbq-klein mbq-warn', txt));\n            return;\n        }\n        var kopf = neu('div', 'mbq-kopf');\n        kopf.appendChild(neu('span', 'mbq-typ', T['typ_' + b.typ]));\n        kopf.appendChild(neu('span', 'mbq-code', b.anzeige));\n        kopf.appendChild(neu('span', 'mbq-summe', summe(b)));\n        ziel.appendChild(kopf);<\/p>\n<p>        var stand = zeitpunkt(b.stand);\n        if (stand && b.zwischengespeichert) { stand += ' \u00b7 ' + T.aus_speicher; }\n        ziel.appendChild(kvTabelle([\n            [T.zeile_quelle, b.quelle ? verweis(b.quelle, T.link_quelle) : ''],\n            [T.zeile_stand, stand],\n            [T.zeile_limit, b.limitRest !== null ? String(b.limitRest) : '']\n        ]));<\/p>\n<p>        if (b.befunde.length) {\n            ziel.appendChild(neu('div', 'mbq-h', T.h_befunde));\n            STUFEN.forEach(function (s) {\n                b.befunde.forEach(function (f) { if (f.stufe === s) { ziel.appendChild(befundKarte(f)); } });\n            });\n        }\n        if (b.typ === 'isrc' && b.aufnahmen.length) {\n            ziel.appendChild(neu('div', 'mbq-h', T.h_aufnahmen));\n            b.aufnahmen.forEach(function (a) { ziel.appendChild(aufnahmeKarte(a)); });\n        }\n        if (b.typ === 'iswc' && b.werke.length) {\n            ziel.appendChild(neu('div', 'mbq-h', T.h_werke));\n            b.werke.forEach(function (w) { ziel.appendChild(werkKarte(w)); });\n        }\n        if ((b.typ === 'upc' || b.typ === 'ean') && b.releases.length) {\n            ziel.appendChild(neu('div', 'mbq-h', T.h_releases));\n            ziel.appendChild(releaseTabelle(b.releases, true));\n        }\n    }<\/p>\n<p>    function erkanntText(e) {\n        if (e.fehler) {\n            return { klasse: 'mbq-warn', text: text('grund_' + e.fehler, { soll: e.soll, n: e.n, anzeige: e.anzeige }) || T.fehler_unbekannt };\n        }\n        return { klasse: 'mbq-ok', text: text('erkannt_' + e.typ, { anzeige: e.anzeige }) };\n    }<\/p>\n<p>    \/\/ --- reCAPTCHA und Abruf -------------------------------------------------------\n    function skriptLaden() {\n        return new Promise(function (auf) {\n            if (window.grecaptcha) { auf(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { auf(true); };\n            s.onerror = function () { auf(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { auf(!!window.grecaptcha); }, 8000);\n        });\n    }\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (auf) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; auf(w); } }\n                setTimeout(function () { einmal(null); }, 12000);\n                try {\n                    window.grecaptcha.ready(function () {\n                        if (fertig) { return; }\n                        if (!window.grecaptcha.execute) { einmal(null); return; }\n                        window.grecaptcha.execute(SITEKEY, { action: 'mbabfrage' }).then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(code) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ code: code, token: token || '' }) })\n                .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n        });\n    }<\/p>\n<p>    \/** #code=... oder ?code=... aus der Adresse, etwa vom Code-Pruefer; gefragt wird erst beim Klick. *\/\n    function vorbelegen(suche) {\n        try {\n            var w = new URLSearchParams(String(suche || '').replace(\/^[#?]\/, '')).get('code');\n            return (typeof w === 'string' && w.length <= 80) ? w : null;\n        } catch (e) { return null; }\n    }\n\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.MBQ = {\n        T: T, ENDPUNKT: ENDPUNKT, lesen: lesen, bewerten: bewerten, darstellen: darstellen, text: text, dauer: dauer,\n        landName: landName, sprachName: sprachName, rolleName: rolleName, statusName: statusName, vorbelegen: vorbelegen,\n        erkanntText: erkanntText, gs1Pruefziffer: gs1Pruefziffer, iswcPruefziffer: iswcPruefziffer\n    };\n\n    var feld = document.getElementById('mbq-code'), knopf = document.getElementById('mbq-knopf');\n    var erkannt = document.getElementById('mbq-erkannt'), ausgabe = document.getElementById('mbq-ausgabe');\n    if (!feld || !knopf || !erkannt || !ausgabe) { return; }\n\n    function zeigeErkannt() {\n        erkannt.textContent = '';\n        erkannt.className = 'mbq-erkannt';\n        if (feld.value.trim() === '') { return; }\n        var gelesen = lesen(feld.value);\n        \/\/ Waehrend des Tippens keine Meldung fuer ein noch unvollstaendiges Stueck\n        if ((gelesen.fehler === 'unbekannt' || gelesen.fehler === 'laenge') &#038;&#038; feld.value.replace(\/[\\s.\\-_]\/g, '').length < 12) { return; }\n        var e = erkanntText(gelesen);\n        erkannt.className = 'mbq-erkannt ' + e.klasse;\n        erkannt.textContent = e.text;\n    }\n    var warten = null;\n    feld.addEventListener('input', function () { clearTimeout(warten); warten = setTimeout(zeigeErkannt, 250); });\n    feld.addEventListener('keydown', function (ev) { if (ev.key === 'Enter') { ev.preventDefault(); knopf.click(); } });\n    Array.prototype.forEach.call(document.querySelectorAll('#mbq-wurzel .mbq-bsp'), function (b) {\n        b.addEventListener('click', function () { feld.value = b.getAttribute('data-code') || ''; zeigeErkannt(); feld.focus(); });\n    });\n\n    var laeuft = false;\n    knopf.addEventListener('click', function () {\n        if (laeuft) { return; }\n        zeigeErkannt();\n        var e = lesen(feld.value);\n        if (e.fehler) {\n            darstellen(bewerten({ fehler: 'code', grund: e.fehler, soll: e.soll, n: e.n, anzeige: e.anzeige }), ausgabe);\n            return;\n        }\n        laeuft = true;\n        knopf.disabled = true;\n        ausgabe.textContent = '';\n        ausgabe.appendChild(neu('p', 'mbq-klein', T.laeuft));\n        abfragen(e.code).then(function (a) {\n            darstellen(bewerten(a), ausgabe);\n            laeuft = false; knopf.disabled = false;\n        }, function () {\n            darstellen(bewerten({ fehler: 'netz' }), ausgabe);\n            laeuft = false; knopf.disabled = false;\n        });\n    });\n\n    var vor = vorbelegen(window.location.hash) || vorbelegen(window.location.search);\n    if (vor) { feld.value = vor; zeigeErkannt(); }\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schl\u00e4gt einen ISRC, eine ISWC oder einen UPC\/EAN in MusicBrainz nach: Aufnahmen mit K\u00fcnstler, L\u00e4nge, Releases und verkn\u00fcpftem Werk, Werke mit Urhebern und Kennungen der Verwertungsgesellschaften, Releases mit Label, Katalognummer und Format. Dazu Hinweise auf mehrfach vergebene Codes.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92903],"class_list":["post-19597","page","type-page","status-publish","hentry","tag-music-production-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Schl\u00e4gt einen ISRC, eine ISWC oder einen UPC\/EAN in MusicBrainz nach: Aufnahmen mit K\u00fcnstler, L\u00e4nge, Releases und verkn\u00fcpftem Werk, Werke mit Urhebern und Kennungen der Verwertungsgesellschaften, Releases mit Label, Katalognummer und Format. Dazu Hinweise auf mehrfach vergebene Codes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-17T14:52:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/isrc-iswc-barcode-lookup-musicbrainz\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/isrc-iswc-barcode-lookup-musicbrainz\\\/\",\"name\":\"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-17T12:21:28+00:00\",\"dateModified\":\"2026-09-17T14:52:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/isrc-iswc-barcode-lookup-musicbrainz\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/isrc-iswc-barcode-lookup-musicbrainz\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/isrc-iswc-barcode-lookup-musicbrainz\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/","og_locale":"en_US","og_type":"article","og_title":"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz - Lukas Wojcik - Blog","og_description":"Schl\u00e4gt einen ISRC, eine ISWC oder einen UPC\/EAN in MusicBrainz nach: Aufnahmen mit K\u00fcnstler, L\u00e4nge, Releases und verkn\u00fcpftem Werk, Werke mit Urhebern und Kennungen der Verwertungsgesellschaften, Releases mit Label, Katalognummer und Format. Dazu Hinweise auf mehrfach vergebene Codes.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-09-17T14:52:10+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/","name":"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-17T12:21:28+00:00","dateModified":"2026-09-17T14:52:10+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/isrc-iswc-barcode-lookup-musicbrainz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"ISRC-, ISWC- und Barcode-Abfrage: Aufnahmen, Werke und Releases in MusicBrainz"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/19597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=19597"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/19597\/revisions"}],"predecessor-version":[{"id":19887,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/19597\/revisions\/19887"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=19597"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=19597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}