Existe algum método de diferenciar computadores?

bom, estou criando um programa básico de Registros, queria saber se possuí alguma forma de diferenciar computadores, exemplo:

estou no meu computador agora, eu crio uma conta usando ele, e não poderei criar nenhuma outra conta nele.

bom, diferenciar por IP não é recomendavel, pois é só mudar o ip e criar uma outra conta. pelo MAC-ADDRESS de rede também não, pois é só mudar também…

Você pode usar o id do HD da máquina, mas mesmo assim não tem como controlar, pois o usuário pode trocar o HD também!
O jeito mais correto é por identificação de usuário, usando e-mail ou cpf por exemplo que são únicos e distintos!

Por qual motivo quer fazer isso?

Vc pode fazer algo mais simples, se o número de usuário/conta for maior que 1, não permitir criar novos usuários/contas.

Tem esse projeto multi plataforma

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.ComputerSystem;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OperatingSystem;

 
public class Hardwares extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Hardware");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {
                String identifier = generateLicenseKey();
                System.out.println(identifier);
            }
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle("Hardware");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    
    
    static String generateLicenseKey()
    {
        SystemInfo systemInfo = new SystemInfo();
        OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
        HardwareAbstractionLayer hardwareAbstractionLayer = systemInfo.getHardware();
        CentralProcessor centralProcessor = hardwareAbstractionLayer.getProcessor();
        ComputerSystem computerSystem = hardwareAbstractionLayer.getComputerSystem();
        
        

        String vendor = operatingSystem.getManufacturer();
        String processorSerialNumber = computerSystem.getSerialNumber();
        String processorIdentifier = centralProcessor.getIdentifier();
        int processors = centralProcessor.getLogicalProcessorCount();

        String delimiter = "#";

        return "SO=" + vendor +  "\n" + 
                "delimiter=" + delimiter +"\n" + 
                "processorSerialNumber=" + processorSerialNumber + "\n" + 
                "delimiter=" + delimiter + "\n" + 
                "processorIdentifier=" + processorIdentifier + "\n" + 
                "delimiter=" + delimiter + "\n" + 
                "processors=" + processors + "\n" +
                "Hd0 de Instalação=" + hardwareAbstractionLayer.getDiskStores()[0].getSerial();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}

Parece que a intel e amd por questões processuais não colocam mais o numero de serie na bios, mas outros fabricantes podem estarem colocando, todavia você pode usar o numero de serie da HD que foi instalado o software.

O problema e’ quando copia o software com a configuração dele na maquina atual, e tambem dependendo do programa vc pode querer ter mais de 1 usuario.

Verdade, nada e’ 100% seguro.Mas quando for instalar o software ele pode obter o numero da HD que será instalado e então com esse numero você cria um arquivo criptografado e salva na configuração, então quando o soft for rodar ele vai verificar se a descriptografia bate com o numero da HD. Se for mudar de HD tera’ que instalar denovo.

E’ claro que nesse caso quem fornece o arquivo criptografado é o dono do software na hora da instalação, seja com ele presente ou atraves da internet.