A Russian number is ten digits after the trunk 8, and the first three are the zone code — 495 Moscow, 812 Saint Petersburg, 383 Novosibirsk oblast — one or two per region, 96 in all. Inside a zone the next one or two digits name the district or town, which is the city code people actually quote: 383-41 Berdsk, 383-61 Barabinsk. This map shows the zones, and draws the two thousand city codes on their municipal districts as you zoom in.
How to read the map. At full view each patch is a zone and the numeral on it is the first three digits, with the city the zone is named for beneath; the colour tells neighbouring zones apart. Zoom in twice and the districts of the zones in view are drawn with their city codes — what you dial after the 8, five digits for a district, four or three for a city that fills its zone — and the town or district beneath; zoom further for the small ones. The plan gave the zones out by region: Moscow 495 and 499, its oblast 496 and 498, Saint Petersburg 812, and so on — a few regions have two, Tatarstan 843 with 855 for Naberezhnye Chelny, Krasnodar 861 with 862 for Sochi, Stavropol 865 with 879 for the Mineral Waters, Samara 846 with 848 for Tolyatti, Vologda 817 with 820 for Cherepovets. The Regions grouping outlines the federal subjects. Click a zone for its list of city codes.
Where the lines come from. The numbering register the Ministry of Digital Development publishes lists every block of geographic numbers with the municipal district or urban okrug it is assigned to, so the city codes are not inferred from a town list but read off the plan: a district's code is the digits all its blocks share. The boundaries are OpenStreetMap's municipal districts via geoBoundaries, which stop at the 2014 border; the peninsula of Crimea is drawn from the Ukrainian layer of the same source, since its 365 and 869 have been in the Russian plan since 2014, while the codes of Donetsk, Luhansk, Kherson and Zaporizhzhia — 856, 857, 860 and 810 — and of Baikonur, 336, are listed and not drawn. Each district is placed on the map by the coordinates of its Wikidata entry; a polygon no district's point lands in takes its nearest neighbour's code, and the build counts those.
Sources. Codes: Реестр российской системы и плана нумерации — the numbering register, files ABC-3xx, ABC-4xx and ABC-8xx: every block of numbers with its operator and municipal district. District coordinates: Wikidata, municipal districts, urban okrugs and towns of Russia with their region (P131) and coordinates (P625). Geometry: geoBoundaries, Russia ADM2 and Ukraine ADM2 clipped to Crimea (simplified), from OpenStreetMap under ODbL; dissolved by city code, by zone and by federal subject.