There are many ways to find the version of an Oracle database, v$version, dba_registry, listener banner, OPatch, the inventory xml file, the installer actions log and non of which are particularly accurate. The way to do it reliably is to analyze the patches and determine checksums for new or modified pieces of code shipped by Oracle. This technique is explained in some detail in an excellent paper by David Litchfield titled "Patch verification of Oracle database servers". This is well worth reading if you want to understand how to reliably check Oracle patch levels.
Why oh why cannot Oracle make it easy for us to determine the patch level and version accurately?