{"id":18960,"date":"2026-09-17T12:39:06","date_gmt":"2026-09-17T10:39:06","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/toolbox\/isrc-upc-ean-iswc-validator\/"},"modified":"2026-09-17T14:28:27","modified_gmt":"2026-09-17T12:28:27","slug":"isrc-upc-ean-iswc-validator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/","title":{"rendered":"ISRC, UPC\/EAN and ISWC Validator: structure and check digits of release codes"},"content":{"rendered":"<div class=\"lw-codes\" id=\"codes-wurzel\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<style>\n.lw-codes { --codes-warn: #e8a33d; }\n:root[data-theme=\"light\"] .lw-codes { --codes-warn: #8f5300; }\n.lw-codes textarea { width: 100%; min-height: 130px; 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: 0.95rem; line-height: 1.5; resize: vertical; }\n.lw-codes .codes-reihe { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: center; margin: 12px 0 0; }\n.lw-codes .codes-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-codes .codes-knopf2 { background: transparent; color: var(--text-secondary, #a0a0b0); border: 1px solid var(--border, #2a2a35); padding: 10px 14px; border-radius: 6px; cursor: pointer; }\n.lw-codes .codes-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-codes .codes-karte.codes-ok { border-left-color: var(--ok, #7ee787); }\n.lw-codes .codes-karte.codes-fehler { border-left-color: var(--fail, #ff7b72); }\n.lw-codes .codes-karte.codes-warn { border-left-color: var(--codes-warn); }\n.lw-codes .codes-kopf { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: baseline; }\n.lw-codes .codes-typ { font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.4px; color: var(--text-secondary, #a0a0b0); }\n.lw-codes .codes-form { font-family: monospace; font-size: 1.12rem; font-weight: 700; color: var(--text-primary, #e8e8ee); word-break: break-all; }\n.lw-codes .codes-urteil { font-weight: 700; font-size: 0.9rem; }\n.lw-codes .codes-urteil.codes-ok { color: var(--ok, #7ee787); }\n.lw-codes .codes-urteil.codes-fehler { color: var(--fail, #ff7b72); }\n.lw-codes .codes-urteil.codes-warn { color: var(--codes-warn); }\n.lw-codes table { border-collapse: collapse; width: 100%; font-size: 0.86rem; margin-top: 8px; }\n.lw-codes th, .lw-codes td { text-align: left; padding: 5px 12px 5px 0; border-bottom: 1px solid var(--border, #2a2a35); vertical-align: top; }\n.lw-codes th { color: var(--text-secondary, #a0a0b0); font-weight: 400; white-space: nowrap; width: 1%; }\n.lw-codes td { color: var(--text-primary, #e8e8ee); }\n.lw-codes td code { font-family: monospace; }\n.lw-codes .codes-meldung { font-size: 0.86rem; color: var(--text-secondary, #a0a0b0); margin: 8px 0 0; line-height: 1.5; }\n.lw-codes .codes-h { font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.98rem; margin: 26px 0 8px; }\n.lw-codes .codes-klein { font-size: 0.84rem; color: var(--text-secondary, #a0a0b0); line-height: 1.55; }\n.lw-codes a { color: var(--accent, #2ba6df); }\n<\/style>\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 18px;\">Distributors and collecting societies reject releases whose codes are malformed, and a single transposed digit in a UPC or ISWC is enough. The validator recognises ISRC, UPC-A, EAN-13 and ISWC codes in a list, checks their structure and check digits, compares ISRC prefixes with the IFPI list of valid codes, splits every code into its parts and shows the correct check digit when a code does not add up.<\/p>\n<p>    <label for=\"codes-eingabe\" class=\"codes-klein\" style=\"display: block; margin-bottom: 6px;\">Codes, one per line (hyphens, dots, spaces and prefixes such as &quot;ISRC&quot; are ignored)<\/label><br \/>\n    <textarea id=\"codes-eingabe\" spellcheck=\"false\" autocomplete=\"off\" placeholder=\"GBDUW0000059&#10;T-034.524.680-1&#10;036000291452\"><\/textarea><\/p>\n<div class=\"codes-reihe\">\n        <button id=\"codes-pruefen\" type=\"button\" class=\"codes-knopf\">Check codes<\/button><br \/>\n        <button id=\"codes-beispiele\" type=\"button\" class=\"codes-knopf2\">Load examples<\/button><br \/>\n        <span id=\"codes-zaehler\" data-mp-mask class=\"codes-klein\" aria-live=\"polite\"><\/span>\n    <\/div>\n<div id=\"codes-ausgabe\" data-mp-mask style=\"margin-top: 18px;\" aria-live=\"polite\"><\/div>\n<div class=\"codes-h\">How the codes are built<\/div>\n<p class=\"codes-klein\" style=\"margin: 0 0 6px;\">ISRC (International Standard Recording Code, ISO 3901) identifies a recording: 12 characters made of a prefix (a two-letter code from the IFPI list and a three-character registrant code), the last two digits of the year of reference and a five-digit designation code. It has no check digit, so the check covers the structure, the prefix list and the cases that the IFPI validation bulletin names as invalid or doubtful.<\/p>\n<p class=\"codes-klein\" style=\"margin: 0 0 6px;\">UPC-A and EAN-13 identify the release as a product. The last digit is a check digit: from the right, the digits are weighted alternately by 3 and 1, and the check digit brings the sum up to the next multiple of ten. A UPC-A becomes an EAN-13 by adding a leading zero.<\/p>\n<p class=\"codes-klein\" style=\"margin: 0 0 6px;\">ISWC (International Standard Musical Work Code, ISO 15707) identifies the composition, not the recording: T, nine digits and a check digit. The T counts as 1, each of the nine digits is multiplied by its position (1 to 9), and the check digit brings the sum up to the next multiple of ten.<\/p>\n<p class=\"codes-klein\" style=\"margin: 20px 0 0;\">Sources: <a href=\"https:\/\/isrc.ifpi.org\/images\/downloads\/ISRC_Handbook.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">ISRC Handbook (IFPI)<\/a> \u00b7 <a href=\"https:\/\/isrc.ifpi.org\/images\/downloads\/Bulletin_2015-01_-_Validating_ISRC_Codes.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Validating an International Standard Recording Code (IFPI Bulletin 2015\/01)<\/a> \u00b7 <a href=\"https:\/\/isrc.ifpi.org\/images\/downloads\/Valid-Characters-in-the-ISRC-Prefix.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">ISRC Agency Code Allocations (IFPI)<\/a> \u00b7 <a href=\"https:\/\/www.iso.org\/standard\/83125.html\" target=\"_blank\" rel=\"noopener noreferrer\">ISO 15707:2022 (ISWC)<\/a> \u00b7 <a href=\"https:\/\/www.gs1.org\/services\/how-calculate-check-digit-manually\" target=\"_blank\" rel=\"noopener noreferrer\">How to calculate a check digit manually (GS1)<\/a><\/p>\n<p class=\"codes-klein\" style=\"font-size: 0.8rem; margin: 14px 0 0;\">Everything runs in the browser. The check covers structure and check digits; whether a code has actually been issued or belongs to a particular release can only be confirmed by the issuing agency or the distributor. The MusicBrainz links open the open music database in a new tab and only then pass the code on.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"sprache\":\"en\",\"einleitung\":\"Distributors and collecting societies reject releases whose codes are malformed, and a single transposed digit in a UPC or ISWC is enough. The validator recognises ISRC, UPC-A, EAN-13 and ISWC codes in a list, checks their structure and check digits, compares ISRC prefixes with the IFPI list of valid codes, splits every code into its parts and shows the correct check digit when a code does not add up.\",\"eingabe_label\":\"Codes, one per line (hyphens, dots, spaces and prefixes such as \\u0022ISRC\\u0022 are ignored)\",\"knopf_pruefen\":\"Check codes\",\"knopf_beispiele\":\"Load examples\",\"beispiele\":\"GBDUW0000059\\nus-um7-18-20728\\nUS-S1Z-26-00001\\nGB-000-00-00000\\nT-034.524.680-1\\nT-034.524.680-2\\n036000291452\\n4006381333931\\n4006381333932\",\"leer\":\"No codes entered.\",\"zaehler_satz\":\"{gesamt} codes \u00b7 {ok} valid \u00b7 {warn} with notes \u00b7 {fehler} invalid\",\"typ_isrc\":\"ISRC\",\"typ_iswc\":\"ISWC\",\"typ_upc\":\"UPC-A (GTIN-12)\",\"typ_ean\":\"EAN-13 (GTIN-13)\",\"typ_gtin14\":\"GTIN-14\",\"typ_gtin8\":\"EAN-8 (GTIN-8)\",\"typ_unbekannt\":\"not recognised\",\"urteil_ok\":\"valid\",\"urteil_warn\":\"valid, see note\",\"urteil_fehler\":\"invalid\",\"teil_land\":\"Country code\",\"teil_registrant\":\"Registrant code\",\"teil_jahr\":\"Year of reference\",\"teil_bezeichnung\":\"Designation code\",\"teil_werknummer\":\"Work identifier\",\"teil_pruefziffer\":\"Check digit\",\"teil_ean\":\"As EAN-13\",\"teil_upc\":\"As UPC-A\",\"pruefziffer_satz\":\"given {gegeben}, calculated {soll}\",\"pruefziffer_falsch\":\"The check digit does not match; with the digits given it has to be {soll}: {richtig}. A wrong check digit usually means a typo in one of the other digits.\",\"isrc_laenge\":\"An ISRC has 12 characters; this input has {n} after removing separators.\",\"isrc_land_zeichen\":\"The first two characters (country code) have to be letters.\",\"isrc_reg_zeichen\":\"Characters 3 to 5 (registrant code) have to be letters or digits.\",\"isrc_jahr_zeichen\":\"Characters 6 and 7 (year of reference) have to be digits.\",\"isrc_nr_zeichen\":\"Characters 8 to 12 (designation code) have to be digits.\",\"isrc_jahr_satz\":\"allocated in {jahr}\",\"iswc_ohne_t\":\"An ISWC starts with the letter T.\",\"iswc_laenge\":\"After the T an ISWC has 10 digits; this input has {n}.\",\"zehn_ziffern\":\"Ten digits without a T could be an ISWC with the prefix missing. The ISWC is written with a leading T, for example T-034.524.680-1.\",\"ziffern_laenge\":\"{n} digits match neither UPC-A (12), EAN-13 (13), GTIN-14 (14) nor EAN-8 (8).\",\"nicht_erkannt\":\"No ISRC, UPC, EAN or ISWC pattern recognised.\",\"gtin14_hinweis\":\"GTIN-14 identifies trade units such as cartons, not a release; stores and distributors expect UPC-A or EAN-13.\",\"gtin8_hinweis\":\"EAN-8 is used for small packaging, not for music releases.\",\"unbekannt\":\"unknown\",\"h_aufbau\":\"How the codes are built\",\"erkl_isrc\":\"ISRC (International Standard Recording Code, ISO 3901) identifies a recording: 12 characters made of a prefix (a two-letter code from the IFPI list and a three-character registrant code), the last two digits of the year of reference and a five-digit designation code. It has no check digit, so the check covers the structure, the prefix list and the cases that the IFPI validation bulletin names as invalid or doubtful.\",\"erkl_upc\":\"UPC-A and EAN-13 identify the release as a product. The last digit is a check digit: from the right, the digits are weighted alternately by 3 and 1, and the check digit brings the sum up to the next multiple of ten. A UPC-A becomes an EAN-13 by adding a leading zero.\",\"erkl_iswc\":\"ISWC (International Standard Musical Work Code, ISO 15707) identifies the composition, not the recording: T, nine digits and a check digit. The T counts as 1, each of the nine digits is multiplied by its position (1 to 9), and the check digit brings the sum up to the next multiple of ten.\",\"quellen_titel\":\"Sources\",\"grenze\":\"Everything runs in the browser. The check covers structure and check digits; whether a code has actually been issued or belongs to a particular release can only be confirmed by the issuing agency or the distributor. The MusicBrainz links open the open music database in a new tab and only then pass the code on.\",\"teil_agentur\":\"ISRC agency\",\"isrc_praefix_unbekannt\":\"{code} is not on the IFPI list of valid ISRC prefixes (January 2026). Only codes from this list are permitted in the first two positions.\",\"isrc_beispiel\":\"The prefix {praefix} is used by ISRC agencies only in documentation and training material and is never allocated, so an ISRC with this prefix is always invalid.\",\"isrc_tc_jahr\":\"The prefix TC was formerly used by TuneCore; ISRCs with a year of reference of 26 or later may not carry it.\",\"isrc_platzhalter\":\"Repeated identical characters, as in GB-000-00-00000, point to dummy or test data that, according to IFPI, is not intended for commercial release.\",\"isrc_jahr_alt\":\"In earlier versions of the standard the year of reference stood for the year of recording. {jahr} is therefore only plausible for an older recording, not as the year of allocation.\",\"isrc_jahr_satz_alt\":\"year of recording {jahr} (earlier rule)\",\"isrc_art_w\":\"worldwide\",\"isrc_art_v\":\"worldwide, automated assignment\",\"isrc_art_d\":\"worldwide, also {tc}\",\"isrc_art_cs\":\"former Serbia and Montenegro (allocated before 2006)\",\"isrc_art_yu\":\"former Yugoslavia (allocated before 2003)\",\"isrc_art_im\":\"Isle of Man (historical; registrants are now served by PPL UK)\",\"isrc_art_pr\":\"Puerto Rico (historically allocated)\",\"isrc_art_tc\":\"formerly used by TuneCore\",\"iswc_null\":\"The work identifier 000000000 is not permitted; ISO 15707 allows 000000001 to 999999999.\",\"nachschlagen\":\"Look up:\",\"link_abfrage\":\"ISRC, ISWC and barcode lookup\",\"url_abfrage\":\"\\\/blog\\\/en\\\/toolbox\\\/isrc-iswc-barcode-lookup-musicbrainz\\\/\"};<\/p>\n<p>    \/\/ IFPI, ISRC Agency Code Allocations (Januar 2026): nur diese Zeichenpaare sind an den\n    \/\/ ersten beiden Stellen zulaessig (Bulletin 2015\/01). Wert: [Anzeigeland (leer = der Code\n    \/\/ selbst) oder Sonderart in Kleinbuchstaben, Index in AGENTUREN (-1 = keine)].\n    var AGENTUREN = [\"International ISRC Registration Authority\", \"CAPIF\", \"LSG\", \"ARIA\", \"COSCAP\", \"Pro-m\u00fasica Brazil\", \"SIMIM\", \"COSBOTS\", \"Re:Sound\", \"IFPI Switzerland\", \"IFPI Chile\", \"FONOTICA\", \"INTERGRAM\", \"BVMI\", \"GRAMEK DK\", \"SODINPRO\", \"EFU\", \"AGEDI\", \"IFPI Finland\", \"Recorded Music NZ\", \"SCPP\", \"PPL UK\", \"IFPI Greece\", \"IFPI (Hong Kong Group) Ltd\", \"ASIRI\", \"PPI\", \"IFPI Israel\", \"IMI\", \"SFH\", \"FIMI\", \"JAMMS\", \"RIAJ\", \"KMCA\", \"AGATA\", \"LaIPA\", \"AMPROFON\", \"RIM\", \"SENA\", \"Gramo\", \"PRODUCE\", \"UNIMPRO\", \"PARI\", \"ZPAV\", \"AFP\", \"SGP\", \"RIAA\", \"UPFR\", \"IFPI Sweden\", \"Recording Industry Association Singapore\", \"SLOVGRAM\", \"TECA\", \"MU-YAP\", \"COTT\", \"RIT\", \"Ukrainian Music Alliance\", \"Camara Uruguaya Del Disco\", \"RISA\"];\n    var PRAEFIXE = {AD:[\"\",0],AE:[\"\",0],AF:[\"\",0],AG:[\"\",0],AI:[\"\",0],AL:[\"\",0],AM:[\"\",0],AO:[\"\",0],AR:[\"\",1],AT:[\"\",2],AU:[\"\",3],AW:[\"\",0],AZ:[\"\",0],BA:[\"\",0],BB:[\"\",4],BC:[\"BR\",5],BD:[\"\",0],BE:[\"\",6],BF:[\"\",0],BG:[\"\",0],BH:[\"\",0],BI:[\"\",0],BJ:[\"\",0],BK:[\"BR\",5],BM:[\"\",0],BN:[\"\",0],BO:[\"\",0],BP:[\"BR\",5],BR:[\"\",5],BS:[\"\",0],BT:[\"\",0],BW:[\"\",7],BX:[\"BR\",5],BY:[\"\",0],BZ:[\"\",0],CA:[\"\",8],CB:[\"CA\",8],CD:[\"\",0],CF:[\"\",0],CG:[\"\",0],CH:[\"\",9],CI:[\"\",0],CL:[\"\",10],CM:[\"\",0],CN:[\"\",0],CO:[\"\",0],CP:[\"w\",0],CR:[\"\",11],CS:[\"cs\",0],CU:[\"\",0],CV:[\"\",0],CW:[\"\",0],CY:[\"\",0],CZ:[\"\",12],DE:[\"\",13],DG:[\"d\",0],DJ:[\"\",0],DK:[\"\",14],DM:[\"\",0],DO:[\"\",15],DZ:[\"\",0],EC:[\"\",0],EE:[\"\",16],EG:[\"\",0],ER:[\"\",0],ES:[\"\",17],ET:[\"\",0],FI:[\"\",18],FJ:[\"\",19],FO:[\"DK\",14],FR:[\"\",20],FX:[\"FR\",20],GA:[\"\",0],GB:[\"\",21],GD:[\"\",0],GE:[\"\",0],GG:[\"\",0],GH:[\"\",0],GI:[\"\",0],GL:[\"DK\",14],GM:[\"\",0],GN:[\"\",0],GQ:[\"\",0],GR:[\"\",22],GT:[\"\",0],GW:[\"\",0],GX:[\"GB\",21],GY:[\"\",0],HK:[\"\",23],HN:[\"\",0],HR:[\"\",0],HT:[\"\",0],HU:[\"\",0],ID:[\"\",24],IE:[\"\",25],IL:[\"\",26],IM:[\"im\",0],IN:[\"\",27],IQ:[\"\",0],IR:[\"\",0],IS:[\"\",28],IT:[\"\",29],JE:[\"\",0],JM:[\"\",30],JO:[\"\",0],JP:[\"\",31],KE:[\"\",0],KG:[\"\",0],KH:[\"\",0],KM:[\"\",0],KN:[\"\",0],KR:[\"\",32],KS:[\"KR\",32],KW:[\"\",0],KY:[\"\",0],KZ:[\"\",0],LA:[\"\",0],LB:[\"\",0],LC:[\"\",0],LI:[\"\",9],LK:[\"\",0],LR:[\"\",0],LS:[\"\",0],LT:[\"\",33],LU:[\"\",6],LV:[\"\",34],MA:[\"\",0],MC:[\"\",0],MD:[\"\",0],ME:[\"\",0],MF:[\"\",0],MG:[\"\",0],MK:[\"\",0],ML:[\"\",0],MM:[\"\",0],MN:[\"\",0],MO:[\"\",0],MP:[\"\",0],MR:[\"\",0],MS:[\"\",0],MT:[\"\",0],MU:[\"\",0],MV:[\"\",0],MW:[\"\",0],MX:[\"\",35],MY:[\"\",36],MZ:[\"\",0],NA:[\"\",0],NE:[\"\",0],NG:[\"\",0],NI:[\"\",0],NL:[\"\",37],NO:[\"\",38],NP:[\"\",0],NZ:[\"\",19],OM:[\"\",0],PA:[\"\",39],PE:[\"\",40],PF:[\"\",0],PG:[\"\",0],PH:[\"\",41],PK:[\"\",0],PL:[\"\",42],PR:[\"pr\",0],PS:[\"\",0],PT:[\"\",43],PY:[\"\",44],QA:[\"\",0],QM:[\"US\",45],QN:[\"w\",0],QR:[\"BR\",5],QT:[\"US\",45],QZ:[\"US\",45],RO:[\"\",46],RS:[\"\",0],RU:[\"\",0],RW:[\"\",0],SA:[\"\",0],SB:[\"\",0],SC:[\"\",0],SD:[\"\",0],SE:[\"\",47],SG:[\"\",48],SI:[\"\",0],SK:[\"\",49],SL:[\"\",0],SM:[\"\",0],SN:[\"\",0],SO:[\"\",0],SR:[\"\",0],SS:[\"\",0],ST:[\"\",0],SV:[\"\",0],SX:[\"\",0],SY:[\"\",0],SZ:[\"\",0],TC:[\"tc\",-1],TD:[\"\",0],TG:[\"\",0],TH:[\"\",50],TL:[\"\",0],TN:[\"\",0],TO:[\"\",19],TR:[\"\",51],TT:[\"\",52],TW:[\"\",53],TZ:[\"\",0],UA:[\"\",54],UG:[\"\",0],UK:[\"GB\",21],US:[\"\",45],UY:[\"\",55],UZ:[\"\",0],VC:[\"\",0],VE:[\"\",0],VG:[\"\",0],VN:[\"\",0],VU:[\"\",0],VV:[\"v\",0],XK:[\"\",0],YE:[\"\",0],YU:[\"yu\",0],ZA:[\"\",56],ZB:[\"ZA\",56],ZM:[\"\",0],ZW:[\"\",0],ZZ:[\"w\",0]};\n    \/\/ Nur fuer Dokumentation und Schulung, werden nie vergeben (Bulletin 2015\/01).\n    var BEISPIEL_PRAEFIXE = ['USS1Z', 'JMK40'];<\/p>\n<p>    \/\/ Oeffentliche Musikdatenbank (Kerndaten CC0); die Links oeffnet erst ein Klick.\n    var MB = 'https:\/\/musicbrainz.org\/';<\/p>\n<p>    \/\/ --- Pruefziffern -----------------------------------------------------------\n    \/\/ GS1: von rechts (ohne Pruefziffer) abwechselnd *3 und *1, Summe auf den\n    \/\/ naechsten Zehner ergaenzen. Gilt fuer GTIN-8, -12 (UPC-A), -13 (EAN), -14.\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    \/\/ ISWC: 1 fuer das T, dann Ziffer i (1..9) mal i; Pruefziffer ergaenzt auf 10.\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\n    \/\/ --- Erkennen und Pruefen ------------------------------------------------------\n    function bereinigen(roh) {\n        return String(roh).trim().toUpperCase().replace(\/^ISRC[:\\s]*\/, '').replace(\/^ISWC[:\\s]*\/, '')\n            .replace(\/^(UPC|EAN|GTIN)[-\\s:]*\/, '').replace(\/[\\s.\\-_\u2010-\u2015]\/g, '');\n    }\n\n    function regionName(code) {\n        try {\n            if (typeof Intl !== 'undefined' &#038;&#038; Intl.DisplayNames) {\n                var n = new Intl.DisplayNames([T.sprache], { type: 'region' }).of(code);\n                if (n &#038;&#038; n !== code) { return n; }\n            }\n        } catch (e) { \/* unbekannter Code *\/ }\n        return null;\n    }\n\n    \/\/ Zweistelliges Bezugsjahr: bis zum laufenden Jahr 20xx, darueber 19xx.\n    function jahrLesen(yy, jetzt) {\n        var j = parseInt(yy, 10), heute = (jetzt || new Date()).getFullYear() % 100;\n        return j <= heute ? 2000 + j : 1900 + j;\n    }\n\n    \/\/ Anzeigename des Praefixes; null, wenn es nicht in der IFPI-Liste steht.\n    function praefixName(land) {\n        var p = PRAEFIXE[land];\n        if (!p) { return null; }\n        var art = p[0];\n        if (art === '' || \/^[A-Z]{2}$\/.test(art)) { return regionName(art || land) || (art || land); }\n        if (art === 'd') { return text('isrc_art_d', { tc: regionName('TC') || 'Turks and Caicos Islands' }); }\n        return T['isrc_art_' + art];\n    }\n\n    function pruefeIsrc(c, jetzt) {\n        var e = { typ: 'isrc', eingabe: c, teile: [], meldungen: [], urteil: 'ok' };\n        if (c.length !== 12) { e.urteil = 'fehler'; e.meldungen.push(text('isrc_laenge', { n: c.length })); return e; }\n        var land = c.slice(0, 2), reg = c.slice(2, 5), yy = c.slice(5, 7), nr = c.slice(7);\n        if (!\/^[A-Z]{2}$\/.test(land)) { e.urteil = 'fehler'; e.meldungen.push(T.isrc_land_zeichen); }\n        if (!\/^[A-Z0-9]{3}$\/.test(reg)) { e.urteil = 'fehler'; e.meldungen.push(T.isrc_reg_zeichen); }\n        if (!\/^\\d{2}$\/.test(yy)) { e.urteil = 'fehler'; e.meldungen.push(T.isrc_jahr_zeichen); }\n        if (!\/^\\d{5}$\/.test(nr)) { e.urteil = 'fehler'; e.meldungen.push(T.isrc_nr_zeichen); }\n        e.form = land + '-' + reg + '-' + yy + '-' + nr;\n        if (e.urteil === 'fehler') { return e; }\n        var name = praefixName(land), jahr = jahrLesen(yy, jetzt);\n        e.teile.push([T.teil_land, land + ' \u00b7 ' + (name || T.unbekannt)]);\n        if (name &#038;&#038; PRAEFIXE[land][1] >= 0) { e.teile.push([T.teil_agentur, AGENTUREN[PRAEFIXE[land][1]]]); }\n        e.teile.push([T.teil_registrant, reg]);\n        e.teile.push([T.teil_jahr, yy + ' \u00b7 ' + text(jahr < 1986 ? 'isrc_jahr_satz_alt' : 'isrc_jahr_satz', { jahr: jahr })]);\n        e.teile.push([T.teil_bezeichnung, nr]);\n        if (!name) {\n            e.urteil = 'fehler';\n            e.meldungen.push(text('isrc_praefix_unbekannt', { code: land }));\n        }\n        if (BEISPIEL_PRAEFIXE.indexOf(land + reg) !== -1) {\n            e.urteil = 'fehler';\n            e.meldungen.push(text('isrc_beispiel', { praefix: land + '-' + reg }));\n        }\n        if (land === 'TC' &#038;&#038; parseInt(yy, 10) >= 26) {\n            e.urteil = 'fehler';\n            e.meldungen.push(T.isrc_tc_jahr);\n        }\n        if (e.urteil !== 'fehler') {\n            var platzhalter = \/^(.)\\1{9}$\/.test(reg + yy + nr);\n            if (platzhalter) { e.urteil = 'warn'; e.meldungen.push(T.isrc_platzhalter); }\n            if (jahr < 1986) { e.urteil = 'warn'; e.meldungen.push(text('isrc_jahr_alt', { jahr: jahr })); }\n            if (!platzhalter) { e.link = MB + 'isrc\/' + c; e.abfrage = T.url_abfrage + '#code=' + c; }\n        }\n        return e;\n    }\n\n    function pruefeIswc(c) {\n        var e = { typ: 'iswc', eingabe: c, teile: [], meldungen: [], urteil: 'ok' };\n        if (!\/^T\\d{10}$\/.test(c)) {\n            e.urteil = 'fehler';\n            e.meldungen.push(\/^T\/.test(c) ? text('iswc_laenge', { n: c.length - 1 }) : T.iswc_ohne_t);\n            return e;\n        }\n        var neun = c.slice(1, 10), gegeben = c.charCodeAt(10) - 48, soll = iswcPruefziffer(neun);\n        e.form = 'T-' + neun.slice(0, 3) + '.' + neun.slice(3, 6) + '.' + neun.slice(6, 9) + '-' + gegeben;\n        e.teile.push([T.teil_werknummer, neun]);\n        e.teile.push([T.teil_pruefziffer, text('pruefziffer_satz', { gegeben: gegeben, soll: soll })]);\n        if (neun === '000000000') {\n            e.urteil = 'fehler';\n            e.meldungen.push(T.iswc_null);\n        } else if (gegeben !== soll) {\n            e.urteil = 'fehler';\n            e.meldungen.push(text('pruefziffer_falsch', { soll: soll, richtig: 'T-' + neun.slice(0, 3) + '.' + neun.slice(3, 6) + '.' + neun.slice(6, 9) + '-' + soll }));\n        }\n        if (e.urteil === 'ok') { e.link = MB + 'iswc\/' + e.form; e.abfrage = T.url_abfrage + '#code=' + e.form; }\n        return e;\n    }\n\n    function pruefeGtin(c) {\n        var typ = c.length === 12 ? 'upc' : (c.length === 13 ? 'ean' : (c.length === 14 ? 'gtin14' : 'gtin8'));\n        var e = { typ: typ, eingabe: c, form: c, teile: [], meldungen: [], urteil: 'ok' };\n        var gegeben = c.charCodeAt(c.length - 1) - 48, soll = gs1Pruefziffer(c.slice(0, -1));\n        e.teile.push([T.teil_pruefziffer, text('pruefziffer_satz', { gegeben: gegeben, soll: soll })]);\n        if (gegeben !== soll) {\n            e.urteil = 'fehler';\n            e.meldungen.push(text('pruefziffer_falsch', { soll: soll, richtig: c.slice(0, -1) + soll }));\n        }\n        if (typ === 'upc') {\n            e.teile.push([T.teil_ean, '0' + c]);\n        } else if (typ === 'ean' &#038;&#038; c.charAt(0) === '0') {\n            e.teile.push([T.teil_upc, c.slice(1)]);\n        } else if (typ === 'gtin14') {\n            e.urteil = e.urteil === 'fehler' ? 'fehler' : 'warn';\n            e.meldungen.push(T.gtin14_hinweis);\n        } else if (typ === 'gtin8') {\n            e.urteil = e.urteil === 'fehler' ? 'fehler' : 'warn';\n            e.meldungen.push(T.gtin8_hinweis);\n        }\n        if (e.urteil === 'ok' &#038;&#038; (typ === 'upc' || typ === 'ean')) { e.link = MB + 'search?query=barcode%3A' + c + '&#038;type=release&#038;method=advanced'; e.abfrage = T.url_abfrage + '#code=' + c; }\n        return e;\n    }\n\n    function pruefeEinen(roh, jetzt) {\n        var c = bereinigen(roh);\n        if (!c) { return null; }\n        if (\/^T\/.test(c) &#038;&#038; \/^T[\\d]*$\/.test(c)) { return pruefeIswc(c); }\n        if (\/^\\d+$\/.test(c)) {\n            if (c.length === 8 || c.length === 12 || c.length === 13 || c.length === 14) { return pruefeGtin(c); }\n            if (c.length === 10) {\n                return { typ: 'unbekannt', eingabe: c, teile: [], meldungen: [T.zehn_ziffern], urteil: 'fehler' };\n            }\n            return { typ: 'unbekannt', eingabe: c, teile: [], meldungen: [text('ziffern_laenge', { n: c.length })], urteil: 'fehler' };\n        }\n        if (\/^[A-Z]{2}\/.test(c) || c.length === 12) { return pruefeIsrc(c, jetzt); }\n        return { typ: 'unbekannt', eingabe: c, teile: [], meldungen: [T.nicht_erkannt], urteil: 'fehler' };\n    }\n\n    function zerlegen(text) {\n        return String(text).split(\/[\\n,;\\t]+\/).map(function (s) { return s.trim(); }).filter(function (s) { return s !== ''; });\n    }\n\n    \/\/ --- Darstellung --------------------------------------------------------------\n    function text(schluessel, werte) {\n        return String(T[schluessel]).replace(\/\\{(\\w+)\\}\/g, function (m, k) { return werte &#038;&#038; werte[k] !== undefined ? werte[k] : m; });\n    }\n    function el(id) { return document.getElementById(id); }\n    function neu(tag, klasse, inhalt) {\n        var x = document.createElement(tag);\n        if (klasse) { x.className = klasse; }\n        if (inhalt !== undefined) { x.textContent = inhalt; }\n        return x;\n    }\n\n    function karte(e, roh) {\n        var k = neu('div', 'codes-karte codes-' + e.urteil);\n        var kopf = neu('div', 'codes-kopf');\n        kopf.appendChild(neu('span', 'codes-typ', T['typ_' + e.typ]));\n        kopf.appendChild(neu('span', 'codes-form', e.form || roh));\n        kopf.appendChild(neu('span', 'codes-urteil codes-' + e.urteil, T['urteil_' + e.urteil]));\n        k.appendChild(kopf);\n        if (e.teile.length) {\n            var tab = neu('table');\n            e.teile.forEach(function (t) {\n                var tr = neu('tr');\n                tr.appendChild(neu('th', '', t[0]));\n                tr.appendChild(neu('td', '', t[1]));\n                tab.appendChild(tr);\n            });\n            k.appendChild(tab);\n        }\n        e.meldungen.forEach(function (m) { k.appendChild(neu('p', 'codes-meldung', m)); });\n        if (e.link) {\n            var zeile = neu('p', 'codes-meldung', T.nachschlagen + ' ');\n            var a = neu('a', '', 'MusicBrainz');\n            a.href = e.link;\n            a.target = '_blank';\n            a.rel = 'noopener noreferrer';\n            zeile.appendChild(a);\n            if (e.abfrage) {\n                \/\/ eigene Abfrage mit Code im Fragment: der Code erreicht den Server erst beim Nachschlagen\n                zeile.appendChild(document.createTextNode(' \u00b7 '));\n                var b = neu('a', '', T.link_abfrage);\n                b.href = e.abfrage;\n                zeile.appendChild(b);\n            }\n            k.appendChild(zeile);\n        }\n        return k;\n    }\n\n    function pruefenUndZeigen() {\n        var ausgabe = el('codes-ausgabe'), zaehler = el('codes-zaehler');\n        var liste = zerlegen(el('codes-eingabe').value).slice(0, 500);\n        ausgabe.textContent = '';\n        var anzahl = { ok: 0, warn: 0, fehler: 0 };\n        liste.forEach(function (roh) {\n            var e = pruefeEinen(roh);\n            if (!e) { return; }\n            anzahl[e.urteil]++;\n            ausgabe.appendChild(karte(e, roh));\n        });\n        zaehler.textContent = liste.length ? text('zaehler_satz', { gesamt: liste.length, ok: anzahl.ok, warn: anzahl.warn, fehler: anzahl.fehler }) : T.leer;\n        return anzahl;\n    }\n\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.CODES = {\n        T: T, PRAEFIXE: PRAEFIXE, AGENTUREN: AGENTUREN, gs1Pruefziffer: gs1Pruefziffer, iswcPruefziffer: iswcPruefziffer, bereinigen: bereinigen,\n        pruefeEinen: pruefeEinen, pruefeIsrc: pruefeIsrc, pruefeIswc: pruefeIswc, pruefeGtin: pruefeGtin, zerlegen: zerlegen,\n        jahrLesen: jahrLesen, regionName: regionName, praefixName: praefixName, pruefenUndZeigen: pruefenUndZeigen\n    };\n\n    if (!el('codes-wurzel') || !el('codes-eingabe')) { return; }\n    el('codes-pruefen').addEventListener('click', pruefenUndZeigen);\n    el('codes-beispiele').addEventListener('click', function () {\n        el('codes-eingabe').value = T.beispiele;\n        pruefenUndZeigen();\n    });\n    var warten = null;\n    el('codes-eingabe').addEventListener('input', function () {\n        clearTimeout(warten);\n        warten = setTimeout(pruefenUndZeigen, 400);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Checks ISRC, UPC, EAN-13 and ISWC codes from a list: detects the type, validates structure and check digits, compares ISRC prefixes with the IFPI list, explains every part and converts between UPC-A and EAN-13.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92901],"class_list":["post-18960","page","type-page","status-publish","hentry","tag-music-production"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ISRC, UPC\/EAN and ISWC Validator: structure and check digits of release codes - 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\/en\/toolbox\/isrc-upc-ean-iswc-validator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ISRC, UPC\/EAN and ISWC Validator: structure and check digits of release codes - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Checks ISRC, UPC, EAN-13 and ISWC codes from a list: detects the type, validates structure and check digits, compares ISRC prefixes with the IFPI list, explains every part and converts between UPC-A and EAN-13.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-17T12:28:27+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\\\/en\\\/toolbox\\\/isrc-upc-ean-iswc-validator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/isrc-upc-ean-iswc-validator\\\/\",\"name\":\"ISRC, UPC\\\/EAN and ISWC Validator: structure and check digits of release codes - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-17T10:39:06+00:00\",\"dateModified\":\"2026-09-17T12:28:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/isrc-upc-ean-iswc-validator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/isrc-upc-ean-iswc-validator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/isrc-upc-ean-iswc-validator\\\/#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\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ISRC, UPC\\\/EAN and ISWC Validator: structure and check digits of release codes\"}]},{\"@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, UPC\/EAN and ISWC Validator: structure and check digits of release codes - 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\/en\/toolbox\/isrc-upc-ean-iswc-validator\/","og_locale":"en_US","og_type":"article","og_title":"ISRC, UPC\/EAN and ISWC Validator: structure and check digits of release codes - Lukas Wojcik - Blog","og_description":"Checks ISRC, UPC, EAN-13 and ISWC codes from a list: detects the type, validates structure and check digits, compares ISRC prefixes with the IFPI list, explains every part and converts between UPC-A and EAN-13.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-09-17T12:28:27+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\/en\/toolbox\/isrc-upc-ean-iswc-validator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/","name":"ISRC, UPC\/EAN and ISWC Validator: structure and check digits of release codes - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-17T10:39:06+00:00","dateModified":"2026-09-17T12:28:27+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/isrc-upc-ean-iswc-validator\/#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\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"ISRC, UPC\/EAN and ISWC Validator: structure and check digits of release codes"}]},{"@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\/18960","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=18960"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/18960\/revisions"}],"predecessor-version":[{"id":19609,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/18960\/revisions\/19609"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=18960"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=18960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}