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.
Jonathan_Medeiros:
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!
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.