Back-End

14 abr, 2008

Criando um serial em VB6

Publicidade

Olá amigos. Antes de inidicarmos, mas entender a idéia do sistema:

  • Criar um serial de liberação diferente a cada dia para um aplicativo;
  • Pedir o número do HD do computador na qual seu sistema está instalado;
  • Com o numero do HD criar um código para gerar nosso serial;

Muito já se viu sobre como validar um CPF/CNPJ. Sabemos que para essa validação do DV, ou seja, dígito verificador, temos um cálculo sobre os 9 primeiros dígitos do CPF, como exemplo. Que tal fazermos nosso próprio cálculo em cima de uma numeração do HD na qual está instalado seu sistema. Essa é apenas uma forma bem simples de segurança que você pode aplicar para seu sistema. A vantagem é que você pode passar o serial para o cliente por telefone ou e-mail, por que o serial é de liberação diária, ou seja, esse mesmo serial não liberaria o sistema no dia seguinte, pois para o dia seguinte já seria outro serial diferente. Mas chega de papo e vamos partir para criação.

Observações:

Termo criar 2 projetos:

1º É o projeto que simula seu programa no cliente;

2º É o aplicativo que vai gerar a senha do dia que você vai fornecer.

1º PROJETO (APLICATIVO CLIENTE)

1. Inicie um projeto no form1 coloque:

TextBox >  Name: serial
Label > Name: codigoHD Número na qual o cliente vai fornecer para você gerar o serial
Command1 > Name: BtLiberar
Coloque um módulo no projeto (module1)

Veja:

Código do form1:
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Dim Autenticar  Variável com o serial de autenticação
Função para mostrar o número do HD
Public Function DriveSerialNumber(Optional strDrive As String = "c:\") As String
Dim X As Long
Dim lngSerialNum As Long
Dim strRoot As String
If Trim(strDrive) = "" Then Exit Function
X = GetVolumeInformation(Left(strDrive, 1) & ":\", vbNullString, 0, lngSerialNum, 0, 0, vbNullString, 0)
DriveSerialNumber = Hex(lngSerialNum)
End Function
Private Sub BtLiberar_Click()
If serial.Text = Autenticar Then
MsgBox "Obrigado! Seu Sistema Já está Liberado!", vbInformation, ""
Else
MsgBox "Serial de Liberação do Dia Incorreto!", vbCritical, ""
End If
End Sub
Private Sub Form_Load()
Mostrar número do HD a ser fornecido para o suporte
codigoHD.Caption = DriveSerialNumber("C:\")
Variavel com serial do dia a ser comparado com o serial que o cliente digitou
Autenticar = LiberarSistemaLocadora(codigoHD.Caption)
End Sub
Código do Module1
  • Dentro do Módulo vamos criar uma função com o seguinte código:

Obs.: Por que devemos criar uma função? É essa função que vai comparar o conteúdo do text(codigo) com o serial fornecido.

Faça:

Public Function LiberarSistemaLocadora(codigo As String)
Variáreis para colocar cada alfanumérico digitado
Dim A, B, C, D, e, F, G, H, dia, mes, ano
Função para alocar os dígitos digitados, lembrando que essa função já foi abordada em outro artigo meu (Funções Internas do VB6)
A = Mid(codigo, 1, 1)
B = Mid(codigo, 2, 1)
C = Mid(codigo, 3, 1)
D = Mid(codigo, 4, 1)
E = Mid(codigo, 5, 1)
F = Mid(codigo, 6, 1)
G = Mid(codigo, 7, 1)
H = Mid(codigo, 8, 1)
Armazenando Dia/ Mês/Ano na qual vai ser necessário para geração de um serial diferente a cada Dia/ Mês/Ano
dia = Format(Now, "d") * 3 - 1
mes = Format(Now, "m")  *  2  +  1  *  dia  +  mês
ano = Format(Now, "y")  +  11  *  dia  -  mes
Fórmula criada utilização a numeração do HD para cada HD vai se criar um serial diferente.
Fórmula essa que você pode alterá-la  ou aumentá-la.
If IsNumeric(A) Then A = (A * 2) - 1 + 3 * 1 + 3 Else A = "S"
If IsNumeric(B) Then B = (B * 3) - 1 + 3 * 2 + 5 Else B = "X5"
If IsNumeric(c) Then c = (c * 5) - 1 + 3 * 3 + 6 Else c = "HW"
If IsNumeric(D) Then D = (D * 6) - 1 + 3 * 4 + 4 Else D = "BS"
If IsNumeric(e) Then e = (e * 4) - 1 + 3 * 5 + 9 Else e = "67"
If IsNumeric(F) Then F = (F * 9) - 1 + 3 * 6 + 5 Else F = "T3"
If IsNumeric(G) Then G = (G * 5) - 1 + 3 * 7 + 8 Else G = "J8"
If IsNumeric(h) Then h = (h * 8) - 1 + 3 * 8 + 2 Else h = "Z1"
LiberarSistemaLocadora = A & B & c & dia & D & e & ano & F & G & mes & h
End Function

2º PROJETO (APLICATIVO PARA GERAR O SERIAL)

1. Inicie um novo projeto no form1 e coloque:


TextBox >  Name: HDcliente
Command1 > Name: BtSerial
Coloque um módulo no projeto (module1)

Veja:

Esse form é para a pessoa repassar o número que está sendo mostrado no 1º projeto que fizemos.

Código do Form:
Declarações
Dim SerialDia
Private Sub BtSerial_Click()
SerialDia = LiberarSistemaLocadora(HDcliente.Text)
If HDcliente.Text = "" Then
MsgBox "Digite o Número do HD do Cliente!"
Exit Sub
End If
MsgBox "O Serial do Dia para esse HD é: " & SerialDia
End Sub
Código do Module1
Public Function LiberarSistemaLocadora(codigo As String)
Variáreis para colocar cada alfanumérico digitado
Dim A, B, C, D, e, F, G, H, dia, mes, ano
Função para alocar os dígitos digitados, lembrando que essa função já foi abordada em outro artigo meu (Funções Internas do VB6)
A = Mid(codigo, 1, 1)
B = Mid(codigo, 2, 1)
C = Mid(codigo, 3, 1)
D = Mid(codigo, 4, 1)
E = Mid(codigo, 5, 1)
F = Mid(codigo, 6, 1)
G = Mid(codigo, 7, 1)
H = Mid(codigo, 8, 1)
Armazenando Dia/ Mês/Ano na qual vai ser necessário para geração de um serial diferente a cada Dia/ Mês/Ano
dia = Format(Now, "d") * 3 - 1
mes = Format(Now, "m")  *  2  +  1  *  dia  +  mês
ano = Format(Now, "y")  +  11  *  dia  -  mes
Fórmula criada utilização a numeração do HD para cada HD vai se criar um serial diferente.
Fórmula essa que você pode alterá-la  ou aumentá-la.
If IsNumeric(A) Then A = (A * 2) - 1 + 3 * 1 + 3 Else A = "S"
If IsNumeric(B) Then B = (B * 3) - 1 + 3 * 2 + 5 Else B = "X5"
If IsNumeric(c) Then c = (c * 5) - 1 + 3 * 3 + 6 Else c = "HW"
If IsNumeric(D) Then D = (D * 6) - 1 + 3 * 4 + 4 Else D = "BS"
If IsNumeric(e) Then e = (e * 4) - 1 + 3 * 5 + 9 Else e = "67"
If IsNumeric(F) Then F = (F * 9) - 1 + 3 * 6 + 5 Else F = "T3"
If IsNumeric(G) Then G = (G * 5) - 1 + 3 * 7 + 8 Else G = "J8"
If IsNumeric(h) Then h = (h * 8) - 1 + 3 * 8 + 2 Else h = "Z1"
LiberarSistemaLocadora = A & B & c & dia & D & e & ano & F & G & mes & h
End Function

Isso foi apenas um exemplo de como poder criar um serial de uma maneira bastante simples. Espero que tenham gostado. Até a próxima!

Fazer o download do projeto completo.