The boy, Julian Hernandez, disappeared when he was five and is now 18, living with his father in Cleveland.
Bobby Hernandez, 53, was arrested and is being held at a jail in Ohio.
The FBI received a tip on 30 October that this teenager may be the long-missing child after problems he had applying for university.
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 many false leads in the search for him throughout the years.
His 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 Mr Hernandez said he was taking his son to pre-school in August 2002 but then fled.
It is not known if Julian knew he was missing. He lived alongside 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 Lt Johnny Evans of the Vestavia Hills, Alabama police.