Start · Sprachen · JavaScript · Referenz · NDEFReadingEvent.serialNumber

NDEFReadingEvent.serialNumber

Eigenschaft

Liefert die Seriennummer des gelesenen NFC-Tags als hexadezimalen String (z. B. <code>04:a2:7b:...</code>) oder einen leeren String, wenn keine verfügbar ist.

seit JavaScript Experimentell: Chrome für Android 89+ (Web NFC), n Kategorie: webapi

Signatur

NDEFReadingEvent.serialNumber

Beschreibung

Die schreibgeschützte Eigenschaft serialNumber der Schnittstelle NDEFReadingEvent enthält die Seriennummer (UID) des NFC-Geräts bzw. -Tags, das gerade gelesen wurde. Das NFC-Protokoll nutzt diese Kennung zur Kollisionsvermeidung, wenn mehrere Tags gleichzeitig im Feld sind, und zur Identifikation. Der Wert ist ein String aus hexadezimalen Bytes, die durch Doppelpunkte getrennt sind, etwa "04:5a:6b:12:c3:80:80".

Das Ereignis entsteht, wenn ein NDEFReader nach dem Aufruf von scan() ein Tag erkennt und das reading-Ereignis auslöst. Neben serialNumber stellt das Ereignisobjekt auch die gelesene message (NDEFMessage) bereit.

Typische Anwendungen sind das Wiedererkennen bekannter Tags (z. B. Inventar, Zutritts-Demos, Check-in-Punkte) oder das Protokollieren, welches physische Tag gescannt wurde, auch wenn es keine oder identische NDEF-Datensätze enthält. Liefert das Tag keine Seriennummer oder gibt die Plattform sie nicht weiter, ist der Wert ein leerer String "".

Rückgabewert

Typ
string
Beschreibung
Die Seriennummer als durch Doppelpunkte getrennte Hex-Bytes (z. B. "04:5a:6b:12:c3:80:80") oder "", wenn keine Seriennummer verfügbar ist.

Beispiele

Seriennummer beim Scannen ausgeben

const scanButton = document.querySelector('#scan');

scanButton.addEventListener('click', async () => {
  if (!('NDEFReader' in window)) {
    console.log('Web NFC wird nicht unterstützt.');
    return;
  }
  try {
    const reader = new NDEFReader();
    await reader.scan(); // erfordert Nutzergeste + Berechtigung

    reader.addEventListener('reading', (event) => {
      console.log(`Tag erkannt: ${event.serialNumber || '(keine Seriennummer)'}`);
      console.log(`Anzahl Datensätze: ${event.message.records.length}`);
    });

    reader.addEventListener('readingerror', () => {
      console.log('Tag konnte nicht gelesen werden.');
    });
  } catch (err) {
    console.error('Scan fehlgeschlagen:', err.name, err.message);
  }
});
Tag erkannt: 04:5a:6b:12:c3:80:80 Anzahl Datensätze: 1

Bekannte Tags wiedererkennen (Check-in-Punkte)

const checkpoints = new Map([
  ['04:5a:6b:12:c3:80:80', 'Eingang'],
  ['04:1f:22:9a:b1:5c:81', 'Lager Halle 2']
]);

const startCheckin = async () => {
  const reader = new NDEFReader();
  const controller = new AbortController();
  await reader.scan({ signal: controller.signal });

  reader.onreading = ({ serialNumber }) => {
    const normalized = serialNumber.toLowerCase();
    const name = checkpoints.get(normalized);
    console.log(name ? `Check-in: ${name}` : `Unbekanntes Tag: ${normalized}`);
    if (name) controller.abort(); // Scan nach Erfolg beenden
  };
};

document.querySelector('#checkin').onclick = startCheckin;
Check-in: Eingang

Seriennummer in Byte-Array umwandeln

const serialToBytes = (serial) =>
  serial ? Uint8Array.from(serial.split(':'), (hex) => parseInt(hex, 16)) : new Uint8Array();

const bytes = serialToBytes('04:5a:6b:12:c3:80:80');
console.log(bytes.length, Array.from(bytes));
7 [4, 90, 107, 18, 195, 128, 128]

// Wichtig · Fallstricke

  • Kompatibilität: Web NFC ist experimentell und nur in Chrome für Android (ab 89) verfügbar. Prüfe vorher mit 'NDEFReader' in window, ob die API existiert.
  • Sicherer Kontext & Berechtigung: Nur über HTTPS nutzbar, nur im Top-Level-Frame. scan() braucht eine Nutzergeste und die NFC-Berechtigung. Solange die Seite im Hintergrund ist, werden keine Ereignisse ausgelöst.
  • Keine Sicherheitsgarantie: Die Seriennummer (UID) lässt sich bei vielen Tag-Typen fälschen oder klonen, und manche Tags erzeugen sie zufällig bei jedem Scan. Verwende sie nicht allein für Authentifizierung oder Zugriffskontrolle.
  • Leerer String: Kann ein Tag oder Gerät keine Seriennummer liefern, ist der Wert "" und nicht null. Prüfe das ausdrücklich.
  • Die Hex-Ziffern werden in der Regel kleingeschrieben. Normalisiere die Schreibweise trotzdem, bevor du Werte vergleichst.