According to the "Useful tips" section (on page 7) of the official specs
, you should be able to read the first 11 bytes of the file and match this pattern:
Based on looking at a small number of "*.jpg" files I happen to have uploaded from a camera (via "iPhoto", which may have been involved in "updating" some of those pictures after the upload), I would actually change that to:
And apparently, you might expect "JFXX" as well. But frankly, I'd be content to trust the file name, and so would focus on the first reply above.
UPDATE: The above assumes that the file is being read in :raw mode (what we commonly understand as the default behavior of doing binmode FH). Also, I agree with what afoken says below: use a module to validate jpeg files, in case there is any doubt about their validity.