Julian Hernandez, 18, was found in Cleveland, Ohio, police said. His mother reported him missing from the Birmingham, Alabama, area in 2002.
His father Bobby Hernandez, 53, was arrested in Ohio.
He has been charged with tampering with records in Ohio to get a driver’s licence and will face abduction charges in Alabama.
Special agent Vicki Anderson said the FBI in Ohio received information on 30 October revealing that a local teenager could in fact be a missing child. The suspicion was prompted after he had problems applying for university.
The boy and his father have apparently been living in Cleveland, she said.
Authorities said Julian is safe and unharmed.
Julian was having issues with his social security number as he applied to universities and approached a school counsellor for help.
The counsellor realised he was listed as a missing child by the National Center for Missing and Exploited Children.
The agency worked with Alabama police and the National Center for Missing and Exploited Children to confirm the boy’s identity.
His mother has been notified of his recovery and was very happy to hear he had been found, but also slightly sceptical because there had been so many false leads in the search for him throughout the years.
The boy’s father is also charged with tampering with records in Ohio so he could obtain a driver’s licence in 2012.
He is being held at the Cuyahoga County Jail in Ohio with a $250,000 (£164,100) bail.
Authorities suspected around the time of the boy’s disappearance that his father was possibly the culprit.
A missing persons database shows that Hernandez said he was taking his son to preschool in August 2002 but then fled.
It is not known if Julian knew he was registered as missing. He lived with a woman and two other children in his father’s house.
“He is 18, he is an adult, so it’s kind of up to him now as to whether he wants to come back,” said Lieutenant Johnny Evans of Vestavia Hills, Alabama police.