Hi :) Klar, es gibt mehrere Quellen:

1. Klassischer, aber etwas technischer Weg: Über den API Marketplace der DB kann man kostenlos die s.g. "StaDa-API" abonnieren und über den Endpunkt /stations eine Liste aller Bahnhöfe inkl. ihrer Bahnhofsnummern beziehen: https://developers.deutschebahn.com/db-api-marketplace/apis/product/stada

2. Etwas obskurer, aber einfacherer Weg: Wenn man auf der Website bahnhof.de einen Bahnhof aufruft, und dort den zugehörigen Lageplan zum Ersatzverkehr öffnet (i.d.R. die zweite oder dritte blaue Kachel oben), sieht die URL des PDFs, das geöffnet wird, folgendermaßen aus: https://www.bahnhof.de/downloads/replacement-service-maps/1071.pdf
Der Name des PDFs (in dem Fall 1071 für Berlin Hbf) ist dabei immer die Bahnhofsnummer.

Ich arbeite bei der DB und habe noch eine interne Quelle, daher nutze ich die beiden o.g. Wege nicht selbst, aber sie gehen beide und sind korrekt :) (PS: Wir arbeiten gerade auch an einer Wiki-Seite für unsere Mapping-Aktivitäten, da würde ich sowas dann auch nochmal aufschreiben, ist aber noch nicht fertig)

Hinweis: Wenn es nur darum geht, eine Bahnhofsnummer auf Korrektheit zu prüfen, und nicht darum, sie zu ermitteln, ist der einfachste Weg übrigens folgender: bahnhof.de/id/<BAHNHOFSNUMMER> aufrufen, man wird auf die zugehörige Bahnhofsseite weitergeleitet, wenn alles stimmt. Beispiel für Frankfurt Hbf (Bahnhofsnummer 1866): https://bahnhof.de/id/1866

Viele Grüße!