12-й чемпионат России по хоккею с мячом состоялся с 13 ноября 2003 года по 13 марта 2004 года.

Участвовала 21 команда. Предварительный турнир по территориальному принципу: Восточная и Западная группы, затем — плей-офф, начиная с 1/8 финала, серии стыковых матчей за 5, 7, 9, 11, 13, 15 места, турнир за 17-22 места. Из запланированных 268 матчей фактически сыграно 260 матчей, В 2 матчах за неявку гостям присуждены технические поражения, а хозяевам, соответственно, технические победы. 6 матчей плей-офф за 5-8 места остались несыгранными. Забито в общей сложности 2030 мячей.

Чемпионом России стала команда «Водник» (Архангельск).

Предварительный этап

+МЗападная группа1234567891011ВНПМячиО 1 «Водник» (Архангельск) |style="background:#999999;"| |style="background:#ffffff;"|2:6 8:4 |style="background:#ffffff;"|7:2 2:2 |style="background:#ffffff;"|6:2 2:1 |style="background:#ffffff;"|6:4 7:3 |style="background:#ffffff;"|6:3 4:4 |style="background:#ffffff;"|9:1 1:2 |style="background:#ffffff;"|11:3 5:0 |style="background:#ffffff;"|9:1 2:0 |style="background:#ffffff;"|10:0 7:3 |style="background:#ffffff;"|9:1 7:2 |style="background:#ffffff;"|16 |style="background:#ffffff;"|2 |style="background:#ffffff;"|2 |style="background:#ffffff;"|120 - 44 = + 76 |style="background:#ffffff;"|50 2 «Зоркий» (Красногорск) |style="background:#ffffff;"|4:8 6:2 |style="background:#999999;"| |style="background:#ffffff;"|5:0 1:5 |style="background:#ffffff;"|5:1 2:3 |style="background:#ffffff;"|6:3 2:3 |style="background:#ffffff;"|4:7 5:1 |style="background:#ffffff;"|9:1 4:4 |style="background:#ffffff;"|13:2 3:1 |style="background:#ffffff;"|10:1 6:3 |style="background:#ffffff;"|12:2 3:2 |style="background:#ffffff;"|5:2 4:3 |style="background:#ffffff;"|14 |style="background:#ffffff;"|1 |style="background:#ffffff;"|5 |style="background:#ffffff;"|109 - 54 = + 55 |style="background:#ffffff;"|43 3 «Родина» (Киров) |style="background:#ffffff;"|2:2 2:7 |style="background:#ffffff;"|5:1 0:5 |style="background:#999999;"| |style="background:#ffffff;"|0:1 3:8 |style="background:#ffffff;"|6:2 3:8 |style="background:#ffffff;"|6:1 7:5 |style="background:#ffffff;"|8:1 3:2 |style="background:#ffffff;"|4:1 5:0 |style="background:#ffffff;"|9:4 4:2 |style="background:#ffffff;"|4:2 10:1 |style="background:#ffffff;"|11:1 4:3 |style="background:#ffffff;"|14 |style="background:#ffffff;"|1 |style="background:#ffffff;"|5 |style="background:#ffffff;"|96 - 57 = + 39 |style="background:#ffffff;"|43 4 «Старт» (Нижний Новгород) |style="background:#ffffff;"|1:2 2:6 |style="background:#ffffff;"|3:2 1:5 |style="background:#ffffff;"|8:3 1:0 |style="background:#999999;"| |style="background:#ffffff;"|7:1 2:4 |style="background:#ffffff;"|8:1 4:4 |style="background:#ffffff;"|8:1 3:3 |style="background:#ffffff;"|3:1 1:1 |style="background:#ffffff;"|4:1 5:2 |style="background:#ffffff;"|7:2 6:3 |style="background:#ffffff;"|6:1 6:1 |style="background:#ffffff;"|13 |style="background:#ffffff;"|3 |style="background:#ffffff;"|4 |style="background:#ffffff;"|86 - 44 = + 42 |style="background:#ffffff;"|42 5 «Уральский трубник» (Первоуральск) |style="background:#ffffff;"|3:7 4:6 |style="background:#ffffff;"|3:2 3:6 |style="background:#ffffff;"|8:3 2:6 |style="background:#ffffff;"|4:2 1:7 |style="background:#999999;"| |style="background:#ffffff;"|3:1 3:6 |style="background:#ffffff;"|5:0 3:2 |style="background:#ffffff;"|7:1 5:2 |style="background:#ffffff;"|13:2 11:3 |style="background:#ffffff;"|8:2 4:1 |style="background:#ffffff;"|9:2 9:2 |style="background:#ffffff;"|14 |style="background:#ffffff;"|0 |style="background:#ffffff;"|6 |style="background:#ffffff;"|108 - 63 = + 45 |style="background:#ffffff;"|42 6 «Ракета» (Казань) |style="background:#ffffff;"|4:4 3:6 |style="background:#ffffff;"|1:5 7:4 |style="background:#ffffff;"|5:7 1:6 |style="background:#ffffff;"|4:4 1:8 |style="background:#ffffff;"|6:3 1:3 |style="background:#999999;"| |style="background:#ffffff;"|6:3 0:4 |style="background:#ffffff;"|8:2 4:5 |style="background:#ffffff;"|7:0 6:3 |style="background:#ffffff;"|7:1 6:3 |style="background:#ffffff;"|8:4 4:2 |style="background:#ffffff;"|10 |style="background:#ffffff;"|2 |style="background:#ffffff;"|8 |style="background:#ffffff;"|89 - 77 = + 12 |style="background:#ffffff;"|32 7 «Локомотив» (Оренбург) |style="background:#ffffff;"|2:1 1:9 |style="background:#ffffff;"|4:4 1:9 |style="background:#ffffff;"|2:3 1:8 |style="background:#ffffff;"|3:3 1:8 |style="background:#ffffff;"|2:3 0:5 |style="background:#ffffff;"|4:0 3:6 |style="background:#999999;"| |style="background:#ffffff;"|3:4 4:2 |style="background:#ffffff;"|3:2 2:3 |style="background:#ffffff;"|3:0 0:7 |style="background:#ffffff;"|3:2 3:6 |style="background:#ffffff;"|6 |style="background:#ffffff;"|2 |style="background:#ffffff;"|12 |style="background:#ffffff;"|45 - 85 = - 40 |style="background:#ffffff;"|20 8 БСК (Санкт-Петербург) |style="background:#ffffff;"|0:5 3:11 |style="background:#ffffff;"|1:3 2:13 |style="background:#ffffff;"|0:5 1:4 |style="background:#ffffff;"|1:1 1:3 |style="background:#ffffff;"|2:5 1:7 |style="background:#ffffff;"|5:4 2:8 |style="background:#ffffff;"|2:4 4:3 |style="background:#999999;"| |style="background:#ffffff;"|6:3 3:3 |style="background:#ffffff;"|2:1 3:7 |style="background:#ffffff;"|5:1 4:5 |style="background:#ffffff;"|5 |style="background:#ffffff;"|2 |style="background:#ffffff;"|13 |style="background:#ffffff;"|48 - 96 = - 48 |style="background:#ffffff;"|17 9 «Север» (Северодвинск) |style="background:#ffffff;"|0:2 1:9 |style="background:#ffffff;"|3:6 1:10 |style="background:#ffffff;"|2:4 4:9 |style="background:#ffffff;"|2:5 1:4 |style="background:#ffffff;"|3:11 2:13 |style="background:#ffffff;"|3:6 0:7 |style="background:#ffffff;"|3:2 2:3 |style="background:#ffffff;"|3:3 3:6 |style="background:#999999;"| |style="background:#ffffff;"|3:0 5:2 |style="background:#ffffff;"|4:2 3:0 |style="background:#ffffff;"|5 |style="background:#ffffff;"|1 |style="background:#ffffff;"|14 |style="background:#ffffff;"|48 - 104 = - 56 |style="background:#ffffff;"|16 10 «Волга» (Ульяновск) |style="background:#ffffff;"|3:7 0:10 |style="background:#ffffff;"|2:3 2:12 |style="background:#ffffff;"|1:10 2:4 |style="background:#ffffff;"|3:6 2:7 |style="background:#ffffff;"|1:4 2:8 |style="background:#ffffff;"|3:6 1:7 |style="background:#ffffff;"|7:0 0:3 |style="background:#ffffff;"|7:3 1:2 |style="background:#ffffff;"|2:5 0:3 |style="background:#999999;"| |style="background:#ffffff;"|5:1 4:4 |style="background:#ffffff;"|3 |style="background:#ffffff;"|1 |style="background:#ffffff;"|16 |style="background:#ffffff;"|48 - 105 = - 57 |style="background:#ffffff;"|10 11 «Строитель» (Сыктывкар) |style="background:#ffffff;"|2:7 1:9 |style="background:#ffffff;"|3:4 2:5 |style="background:#ffffff;"|3:4 1:11 |style="background:#ffffff;"|1:6 1:6 |style="background:#ffffff;"|2:9 2:9 |style="background:#ffffff;"|2:4 4:8 |style="background:#ffffff;"|6:3 2:3 |style="background:#ffffff;"|5:4 1:5 |style="background:#ffffff;"|0:3 2:4 |style="background:#ffffff;"|4:4 1:5 |style="background:#999999;"| |style="background:#ffffff;"|2 |style="background:#ffffff;"|1 |style="background:#ffffff;"|17 |style="background:#ffffff;"|45 - 113 = - 68 |style="background:#ffffff;"|7+

В верхних строках таблицы приведены результаты домашних матчей, а в нижних — результаты игр на выезде.

+МВосточная группа12345678910ВНПМячиО 1 «Кузбасс» (Кемерово) |style="background:#999999;"| |style="background:#ffffff;"|3:0 1:3 |style="background:#ffffff;"|6:1 1:2 |style="background:#ffffff;"|10:3 2:0 |style="background:#ffffff;"|6:2 4:0 |style="background:#ffffff;"|10:3 9:5 |style="background:#ffffff;"|4:2 5:2 |style="background:#ffffff;"|5:1 4:4 |style="background:#ffffff;"|6:1 5:3 |style="background:#ffffff;"|5:0 8:1 |style="background:#ffffff;"|15 |style="background:#ffffff;"|1 |style="background:#ffffff;"|2 |style="background:#ffffff;"|94 - 33 = + 61 |style="background:#ffffff;"|46 2 СКА-«Нефтяник» (Хабаровск) |style="background:#ffffff;"|3:1 0:3 |style="background:#999999;"| |style="background:#ffffff;"|6:3 2:4 |style="background:#ffffff;"|5:2 3:4 |style="background:#ffffff;"|3:1 3:1 |style="background:#ffffff;"|4:2 5:8 |style="background:#ffffff;"|6:2 4:0 |style="background:#ffffff;"|5:1 8:3 |style="background:#ffffff;"|5:0 8:3 |style="background:#ffffff;"|7:0 10:2 |style="background:#ffffff;"|14 |style="background:#ffffff;"|0 |style="background:#ffffff;"|4 |style="background:#ffffff;"|87 - 40 = + 47 |style="background:#ffffff;"|42 3 «Енисей» (Красноярск) |style="background:#ffffff;"|2:1 1:6 |style="background:#ffffff;"|4:2 3:6 |style="background:#999999;"| |style="background:#ffffff;"|6:3 3:6 |style="background:#ffffff;"|10:5 4:2 |style="background:#ffffff;"|8:6 8:3 |style="background:#ffffff;"|9:3 3:3 |style="background:#ffffff;"|11:3 3:3 |style="background:#ffffff;"|10:1 8:2 |style="background:#ffffff;"|7:1 3:1 |style="background:#ffffff;"|13 |style="background:#ffffff;"|2 |style="background:#ffffff;"|3 |style="background:#ffffff;"|103 - 57 = + 46 |style="background:#ffffff;"|41 4 «Сибскана-Энергия» (Иркутск) |style="background:#ffffff;"|0:2 3:10 |style="background:#ffffff;"|4:3 2:5 |style="background:#ffffff;"|6:3 3:6 |style="background:#999999;"| |style="background:#ffffff;"|8:2 3:4 |style="background:#ffffff;"|5:3 3:5 |style="background:#ffffff;"|8:3 4:3 |style="background:#ffffff;"|5:3 7:1 |style="background:#ffffff;"|3:2 2:5 |style="background:#ffffff;"|3:1 10:2 |style="background:#ffffff;"|11 |style="background:#ffffff;"|0 |style="background:#ffffff;"|7 |style="background:#ffffff;"|79 - 63 = + 16 |style="background:#ffffff;"|33 5«Металлург» (Братск) |style="background:#ffffff;"|0:4 2:6 |style="background:#ffffff;"|1:3 1:3 |style="background:#ffffff;"|2:4 5:10 |style="background:#ffffff;"|4:3 2:8 |style="background:#999999;"| |style="background:#ffffff;"|7:4 3:4 |style="background:#ffffff;"|5:3 1:1 |style="background:#ffffff;"|6:1 3:5 |style="background:#ffffff;"|8:4 3:2 |style="background:#ffffff;"|6:3 5:4 |style="background:#ffffff;"|8 |style="background:#ffffff;"|1 |style="background:#ffffff;"|9 |style="background:#ffffff;"|64 − 72 = - 8 |style="background:#ffffff;"|25 6 «Маяк» (Краснотурьинск) |style="background:#ffffff;"|5:9 3:10 |style="background:#ffffff;"|8:5 2:4 |style="background:#ffffff;"|3:8 6:8 |style="background:#ffffff;"|5:3 3:5 |style="background:#ffffff;"|4:3 4:7 |style="background:#999999;"| |style="background:#ffffff;"|2:2 2:8 |style="background:#ffffff;"|4:2 4:4 |style="background:#ffffff;"|4:2 3:6 |style="background:#ffffff;"|6:1 3:3 |style="background:#ffffff;"|6 |style="background:#ffffff;"|3 |style="background:#ffffff;"|9 |style="background:#ffffff;"|71 - 90 = - 19 |style="background:#ffffff;"|21 7 «Саяны» (Абакан) |style="background:#ffffff;"|2:5 2:4 |style="background:#ffffff;"|0:4 2:6 |style="background:#ffffff;"|3:3 3:9 |style="background:#ffffff;"|3:4 3:8 |style="background:#ffffff;"|1:1 3:5 |style="background:#ffffff;"|8:2 2:2 |style="background:#999999;"| |style="background:#ffffff;"|2:0 4:5 |style="background:#ffffff;"|4:1 5:2 |style="background:#ffffff;"|7:2 2:6 |style="background:#ffffff;"|5 |style="background:#ffffff;"|3 |style="background:#ffffff;"|10 |style="background:#ffffff;"|56 - 69 = - 13 |style="background:#ffffff;"|18 8 «Сибсельмаш» (Новосибирск) |style="background:#ffffff;"|4:4 1:5 |style="background:#ffffff;"|3:8 1:5 |style="background:#ffffff;"|3:3 3:11 |style="background:#ffffff;"|1:7 3:5 |style="background:#ffffff;"|5:3 1:6 |style="background:#ffffff;"|4:4 2:4 |style="background:#ffffff;"|5:4 0:2 |style="background:#999999;"| |style="background:#ffffff;"|5:0 1:4 |style="background:#ffffff;"|6:1 4:5 |style="background:#ffffff;"|4 |style="background:#ffffff;"|3 |style="background:#ffffff;"|11 |style="background:#ffffff;"|52 - 81 = - 29 |style="background:#ffffff;"|15 9 СКА-«Забайкалец» (Чита) |style="background:#ffffff;"|3:5 1:6 |style="background:#ffffff;"|3:8 0:5