How to change the Author Slug from Username to Nickname and deal with Special Characters

I need to change the author slug from username to nickname:

This is what is set by default: http://domain.tld/author/(username)

This is what I need: http://domain.tld/author/(nickname)-(author-ID)

As I am running a multi-author-blog, I do need a functional fix instead of manually changing the author slug in the database. I tried the following workaround, but some authors are using special characters (e.g. “&”, accent marks or umlauts) in their nickname, which is failing the solution.

Additionally, I need to get a solution for duplicate author nicenames. Maybe its possible to add the author ID to the end of the author slug?

Solutions Collecting From Web of "How to change the Author Slug from Username to Nickname and deal with Special Characters"