A read is supposed to be fine. At read time the firmware *should* rewrite the cell if the read is weak.
The firmware also *should* go out and patrol the cells when idle and it has power.
you can dd if=/dev/sdX of=/dev/null bs=2M once a year if your firmware behaves.
If your drive is offline you could
dd if=/dev/sdX of=/dev/sdX bs=2M iflag=fullblock conv=sync,noerror status=progress
to be sure, though write endurance is finite.
If you're running zfs you can 'zpool scrub poolname' to force validation of all the written data. This is most helpful when you can't trust the firmware to not be buggy crap. Which only applies to 90% of drive firmware out there.