I don't want to deal with hardware ties because people get new computers and then I have to give them new ID's. Also, I provide my program as networkable and don't charge extra per workstation.
My clients print invoices and other data for their clients, so their name, address, and phone appear on that document. I use a keyfile system where the data is encrypted. The program then un-encrypts the record at startup and applies it while the program is running.
I also built an autoupdater that downloads the keyfile every 3 hours to be sure it is the current version. With this I can activate messages that support payments were not received, and thus support is no longer available, or shut off systems for license violations, or handle access for people renting the software ( SAAS ).
30 years ago I had a problem with software pirates. Once I went this route it all stopped.
For awhile I used SoftwareKey which actually can be setup to handle licenses, fees, demos, etc. online. It's only beneficial if you use their services to do the processing, and their credit card fees are significantly higher than what I get through my bank. However, their system does work, and removes you from any oversight problems.
Tim