Actually, methods one and two are the same, since both return the kernel identification string. Both of these will not work on distributions which do not put their name into the kernel ID (such as AFAIR slackware) or on systems with a custom kernel.

The /etc/issue file should not be trusted, the file is intended as a text message to be displayed before login for telnet, or after the username has been entered with SSH. The issue file was never intended for storing a distribution version, the fact most distros put something there is merely coincidental branding (coz it's nice to have something in there)