uniuq no

V

Vetrivel Vetrivel

I want to create new unique id in ruby.I have used the following
coding.But I don''t know whether it works perfectly or not.

t = Time.new
p "%10.5f" % t.to_f

does it give unique value always.I you know some other way ,please say
to create unique id .
 
7

7stud --

Vetrivel said:
I want to create new unique id in ruby.I have used the following
coding.But I don''t know whether it works perfectly or not.

t = Time.new
p "%10.5f" % t.to_f

does it give unique value always.

This might be better:

d = Time.new
t = d.to_f
puts t

r = rand
puts r

p_id = $$
puts p_id

new_id = t + 10000000 * r + 10000000 * p_id
p new_id
 
R

Raphael Clancy

7stud said:
This might be better:

d = Time.new
t = d.to_f
puts t

r = rand
puts r

p_id = $$
puts p_id

new_id = t + 10000000 * r + 10000000 * p_id
p new_id

Be a little careful with this, floats are not very precise, (see:
http://www.ruby-forum.com/topic/178503 ) and this could lead to some
duplication.

irb(main):001:0> a = (10.12 * 100).to_i
=> 1011
irb(main):002:0> b = (10.11 * 100).to_i
=> 1011
irb(main):003:0> a == b
=> true

While this really shouldn't be a problem with this scheme, big decimal
might be safer...

(see:
http://www.ruby-doc.org/stdlib/libdoc/bigdecimal/rdoc/classes/BigDecimal.html
)
 
R

Raphael Clancy

Vetrivel said:
I want to create new unique id in ruby.I have used the following
coding.But I don''t know whether it works perfectly or not.

t = Time.new
p "%10.5f" % t.to_f

does it give unique value always.I you know some other way ,please say
to create unique id .

How about something like this...
count = 0
t = Time.now.to_s
10000.times {
if( t == Time.now.to_s)
count = count + 1
else
count = 0
t = Time.now.to_s
end
uniqid = t + "." + count.to_s
puts uniqid
}

That way you don't have to worry about rounding, or the possibility that
the same random number might come up twice. The only real problem with
this scheme is that on a very fast computer it might be possible to
generate more ids each second than will fit in an Int. But, Bignum might
be able to help there...
 
L

Lars Haugseth

* Vetrivel Vetrivel said:
I want to create new unique id in ruby.I have used the following
coding.But I don''t know whether it works perfectly or not.

t = Time.new
p "%10.5f" % t.to_f

does it give unique value always.I you know some other way ,please say
to create unique id .

UUID¹ is a standard way of constructing unique identifiers, and a Ruby
library² exist already, so unless you require the identifiers to be
integers, I suggest you use that.

[1] http://en.wikipedia.org/wiki/UUID
[2] http://wiki.github.com/assaf/uuid
 
F

Florian Gilcher

* Vetrivel Vetrivel said:
I want to create new unique id in ruby.I have used the following
coding.But I don''t know whether it works perfectly or not.

t =3D Time.new
p "%10.5f" % t.to_f

does it give unique value always.I you know some other way ,please =20=
say
to create unique id .

UUID=B9 is a standard way of constructing unique identifiers, and a = Ruby
library=B2 exist already, so unless you require the identifiers to be
integers, I suggest you use that.

[1] http://en.wikipedia.org/wiki/UUID
[2] http://wiki.github.com/assaf/uuid

--=20
Lars Haugseth

"If anyone disagrees with anything I say, I am quite prepared not =20
only to
retract it, but also to deny under oath that I ever said it." -Tom =20
Lehrer

UUIDs can also be notated in an integer representation. It's just a =20
bit long.

There are multiple libraries, this example uses the gem uuidtools:
227941543066369752189048382045440381927

They are the best way to choose.

Regards,
Florian

--
Florian Gilcher

smtp: (e-mail address removed)
jabber: (e-mail address removed)
gpg: 533148E2
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,176
Messages
2,570,950
Members
47,505
Latest member
BrentonDzo

Latest Threads

Top