There are no more effective methods.
You can check that the file sizes are the same, but there's a very real chance of a false positive. Checking file extension is useless because you can have two identical files with different extensions.
You can check that the file contents match exactly, e.g. with the cmp command, which is part of any Unix install. This is much slower than checking file size, because size is just a metadata read and a byte-for-byte compare requires reading the entirety of both files.
You can compute a checksum, which is essentially the same as the above but (1) consumes more CPU in the simple two-file case and (2) makes comparing more than two files much easier. The reason for this is that you can cache the checksum so you don't have to re-read each file for every other file, you just compare the checksums.
If you have a known file type, such as an image type, you could perform "better" tests for approximate equality, if approximate equality was your goal. Any such method would not consume less CPU or fewer disk reads than any of the above methods.
If your filesystem is ZFS or another FS that checksums files or blocks "natively" you could efficiently compare files simply by reading filesystem metadata.
Your best bet when implementing a generic duplicate finder is to go with a pre-rolled solution. If you must do it yourself you should scan and checksum all files, maintain a database of the results, and then refresh it when files change (or periodically if that is better for your scenario). Duplicate checking then becomes a simple and efficient matter of querying the database.