$form_id: What is the difference between #id and #value?
$form_id always has _ in it. Because in hook_form_FORM_ID_alter() you always have to put replace FORM_ID with $form_id so you can't put - in function name.

$form_id: String representing the name of the form itself. Typically this is the name of the function that generated the form.


And #id is html safe id. id attribute for form tag.