In this paper a classification of Reidemeister moves, which is the most refined, is introduced. In particular, this classification distinguishes some $\Omega_3$-moves that only differ in how the three strands that are involved in the move are ordered on the knot. To transform knot diagrams of isotopic knots into each other one must in general use $\Omega_3$-moves of at least two different classes. To show this, knot diagram invariants that jump only under $\Omega_3$-moves are introduced. Knot diagrams of isotopic knots can be connected by a sequence of Reidemeister moves of only six, out of the total of 24, classes. This result can be applied in knot theory to simplify proofs of invariance of diagrammatical knot invariants. In particular, a criterion for a function on Gauss diagrams to define a knot invariant is presented.