There is no single magic algorithm for patient matching, and I doubt there ever will be.
For starters, there are regional variances. As MMattoli pointed out, what works well in an urban United States hospital probably won't fit well in a rural Australian clinic treating Aborigines.
Also, individual sites have differing views on fault tolerance. If you only matched when you were absolutely sure, you'd get a lot of missed matches. This causes duplicate patient records, which creates a whole other set of problems. Most sites will be willing to settle for pretty sure, but how sure is sure enough? Ask 10 people and you'll get 12 answers.
Therefore the "best" algorithm will be configurable, so your customers can tune it to fit their needs.
When considering a match, different fields offer varying degrees of confidence.
Healthcare-specific identifiers offer the most confidence, since their whole purpose is to uniquely identify the person within the health system. Hospitals usually take pains to make sure these do not get duplicated.
- National Health ID (e.g. UK NHS Number)
- Hospital-assigned Medical Record Number.
Other patient identifiers may offer high confidence as well, depending on the system. For instance, a Military ID is probably very relevant in a military hospital.
- Military ID
- Insurance ID
- Social Security Number (In the US, Social Security Number is generally not considered a high-confidence match, due to rampant insurance fraud.)
In absence of unique identifiers, one must resort to demographic information. It is ill-advised to match on any one field, but the more demographic field match, the more confident the match.
Things about a person that don't often change are good for matching:
- Date of Birth
But even more malleable information can be considered in the match to boost confidence:
- Phone Number
- Email Address