Although these two terms are sometimes used interchangeably, their meanings are quite different. Verification is the process of ensuring that the software has met the specification as designed and validation is checking to see whether the customer needs are captured correctly in the specification.
According to CMM, ISO9000 and many other software standards, building quality in software requires a robust requirement phase which includes documentation, unit level test design, software interdependencies, software module interactions and rate determinations. Verification occurs from the beginning of the software development lifecycle throughout each phase of development to assure that the specifications as prescribed are followed. It is during this process where design flaws are recognized and the specification will be revisited OR software anomalies are flushed out because they may have deviated from the intended requirements. Verification comes in the form of Document Inspections (involving strategists, writers, coders, testers), walkthroughs, reviews and unit level testing.
Validation occurs towards the end of the software development lifecycle. Its intent is to determine if the software operates as prescribed to satisfy the customer demand, that is, if the requirements were correctly written. This involves mostly system level testing and if properly done, will reveal any anomalies that were missed during the verification stage. It is entirely possible to implement a robust verification process and still have failures at the validation stage as you may find that while the software meets the requirements, the requirements does not meet the end user demands.
Both verification and validation (V&V) are essential components of delivering a quality product/software to market. If done with due diligence, often, the manufacturer can be confident that they will deliver a robust product with quality built in and customer satisfaction will be met or exceeded.