Using *67 will block a call for free. This is on a per call basis. Or it used to be.
Every area in the USA uses a different phone company so rules are different.
In El Paso you used to have to press a *code to UNBLOCK your call or it was set up so everyone’s call was blocked.
When I lived in MD it was at the time at least, if anyone had caller ID they also had an option to block the blocker.
One annoying thing is, at least in Chgo, is with the new number of local phone companies competeting caller ID is less valuable.
For instance AT&T local service calls to my house (that is the caller that calls me is using AT&T as a local carrier) the calls all show up as Illinois (or whatever state) Number and the phone number. The people’s names do not appear.
Telco local service calls all appear on my caller ID as “Out of Area” even if they are calling from down the street.
I do not answer calls out of area or private. People know this. I pay $9+ dollars a month for caller ID and there is no real reason a friend should block his number.