SQL Server'a bir göz atın - Çok ayrıntılı bir açıklaması olan tabanlı rasgele sayılar ayarlayın .
Özetlemek gerekirse, aşağıdaki kod, eşit dağılımlı 0 ile 13 arasında rastgele bir sayı üretir:
ABS(CHECKSUM(NewId())) % 14
Aralıkınızı değiştirmek için, ifadenin sonundaki sayıyı değiştirmeniz yeterlidir. Hem pozitif hem de negatif sayılar içeren bir aralığa ihtiyacınız varsa çok dikkatli olun. Yanlış yaparsanız, 0 sayısını iki kez saymak mümkündür.
Odadaki matematik kuruyemişleri için küçük bir uyarı: bu kodda çok hafif bir önyargı var. CHECKSUM()
Sonuç olarak, tüm sql Int veri tipinde eşit olan veya en azından benim (editör) testimin gösterebileceği en yakın sayılar elde edersiniz. Ancak, CHECKSUM () bu aralığın en üst ucunda bir sayı ürettiğinde bazı yanlılıklar olacaktır. Bu maksimum tamsayıdan önce, mümkün olan maksimum tamsayı ile istediğiniz aralığın boyutunun son tam katı (bu durumda 14) arasında bir sayı elde ettiğinizde, bu sonuçlar aralığınızın üretilemeyen geri kalan kısmı üzerinde tercih edilir 14'ün katları.
Örnek olarak, Int türünün tüm aralığının sadece 19 olduğunu düşünün. 19, tutabileceğiniz mümkün olan en büyük tam sayıdır. CHECKSUM () 14-19 ile sonuçlandığında, bunlar 0-5 sonuçlarına karşılık gelir. Bu sayılar 6-13 üzerinde yoğun bir şekilde tercih edilir, çünkü CHECKSUM () 'un onları üretme olasılığı iki kat daha yüksektir. Bunu görsel olarak göstermek daha kolaydır. Hayali tam sayı aralığımız için olası sonuçların tamamı aşağıdadır:
Sağlama Toplamı Tamsayı: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Aralık Sonuç: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 2 3 4 5
Burada bazı sayıları üretme şansının diğerlerinden daha fazla olduğunu görebilirsiniz: önyargı. Neyse ki, Int türünün gerçek aralığı çok daha büyük ... o kadar ki çoğu durumda önyargı neredeyse tespit edilemez. Ancak, ciddi bir güvenlik kodu için bunu yaparken kendinizi fark ederseniz farkında olmak bir şeydir.