may be you could use the barcode that is on almost every book
search this forum and find this thread about UUID :
or also this method :
[code]Function NewUUID() As String
'* Copyright © 2007, Taylor Design
'* All rights reserved.
'* Redistribution and use in source and binary forms, with or without
'* modification, are permitted provided that the following conditions are met:
'* * Redistributions of source code must retain the above copyright
'* notice, this list of conditions and the following disclaimer.
'* * Redistributions in binary form must reproduce the above copyright
'* notice, this list of conditions and the following disclaimer in the
'* documentation and/or other materials provided with the distribution.
'* * Neither the name of the company nor the
'* names of its contributors may be used to endorse or promote products
'* derived from this software without specific prior written permission.
‘* THIS SOFTWARE IS PROVIDED BY Taylor Design ``AS IS’’ AND ANY
'* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
'* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
'* DISCLAIMED. IN NO EVENT SHALL Taylor Design BE LIABLE FOR ANY
'* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
'* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
'* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
'* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
'* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
'* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'Creates a Universally Unique Identifier.
'This method creates its UUID using only RB framework
'methods. The resulting UUID is 36 bytes in length.
'For this method to fail there would have to be two machines with
'identical MAC addresses, clock times, boot times, and random number
'generators (motherboard device). The odds are extremely small that this
'could ever occur, and in fact should never occur with network machines.
Dim Block As MemoryBlock
Block = New MemoryBlock(36)
'Uniqueness in space - machine MAC address, 12 bytes.
Dim nic As NetworkInterface
Dim mac As String
If System.NetworkInterfaceCount > 0 Then
nic = System.GetNetworkInterface(0)
mac = nic.MACAddress
mac = ReplaceAll(mac, “:”, “”)
Block.StringValue(0, 12) = mac
'If there’s no network interface, a random number is better than nothing.
'Note that the last 4 bytes of the second Rnd will be overwritten.
Block.DoubleValue(0) = Rnd
Block.DoubleValue(8) = Rnd
'Uniqueness in time - TotalSeconds + machine Microseconds.
'TotalSeconds, 8 bytes.
Dim DateTime As Date = New Date
Block.DoubleValue(12) = DateTime.TotalSeconds
'Microseconds, which is based on boot time, 8 bytes.
Block.DoubleValue(20) = Microseconds
'Further uniqueness in space/time - random number generated by
'motherboard (space) based on boot time and seed, 8 bytes.
Block.DoubleValue(28) = Rnd
Return Block.StringValue(0, 36)