In a way, validation rules work the opposite way of how we programmers normally think.
If the conditions evaluate to true, the validation rule is tripped and prevents dml from ocurring on that record (and you'll either get a validation exception or an error noted in the
database.saveresult if you are using allOrNone = false).
So if you want to enforce this rule (Id__c cannot be blank) only for the target profile, you need to use
= instead of
If [User has target profile] AND [Field is blank], then raise the error.
true, false you have at the end should also be removed (adding a literal TRUE won't affect the outcome of the rest of the AND, while a literal FALSE will always cause the AND to return FALSE).
Got some clarification in the comments.
The goal here is different than I first thought. Instead of exempting a profile from the validation rule, this is meant to require a field on
User to be filled when that
User record has the target profile.
In that case, using
$Profile is wrong.
$Profile is a global variable (anything starting with
$ is a global, and thus not based on the data of the record) giving you the profile of the user attempting to make a change to the record rather than the profile of the user record being inserted/updated.
What you want in this case is to check the profile of the user record itself.
Profile.Name = 'Quality Sales Rep'