code_junkie

Does SQL Server CheckSum calculate a CRC? If not how can I get MS SQL to calculate a CRC on an arbitrary varchar column?

Nov 12th, 2011
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.97 KB | None | 0 0
  1. DECLARE @input VARCHAR(50)
  2. SET @input = 'test'
  3.  
  4. SET NOCOUNT ON
  5. DECLARE @tblLookup TABLE (ID INT IDENTITY(0,1) NOT NULL, Value BIGINT)
  6. INSERT INTO @tblLookup VALUES (0)
  7. INSERT INTO @tblLookup VALUES (1996959894)
  8. INSERT INTO @tblLookup VALUES (3993919788)
  9. INSERT INTO @tblLookup VALUES (2567524794)
  10. INSERT INTO @tblLookup VALUES (124634137)
  11. INSERT INTO @tblLookup VALUES (1886057615)
  12. INSERT INTO @tblLookup VALUES (3915621685)
  13. INSERT INTO @tblLookup VALUES (2657392035)
  14. INSERT INTO @tblLookup VALUES (249268274)
  15. INSERT INTO @tblLookup VALUES (2044508324)
  16. INSERT INTO @tblLookup VALUES (3772115230)
  17. INSERT INTO @tblLookup VALUES (2547177864)
  18. INSERT INTO @tblLookup VALUES (162941995)
  19. INSERT INTO @tblLookup VALUES (2125561021)
  20. INSERT INTO @tblLookup VALUES (3887607047)
  21. INSERT INTO @tblLookup VALUES (2428444049)
  22. INSERT INTO @tblLookup VALUES (498536548)
  23. INSERT INTO @tblLookup VALUES (1789927666)
  24. INSERT INTO @tblLookup VALUES (4089016648)
  25. INSERT INTO @tblLookup VALUES (2227061214)
  26. INSERT INTO @tblLookup VALUES (450548861)
  27. INSERT INTO @tblLookup VALUES (1843258603)
  28. INSERT INTO @tblLookup VALUES (4107580753)
  29. INSERT INTO @tblLookup VALUES (2211677639)
  30. INSERT INTO @tblLookup VALUES (325883990)
  31. INSERT INTO @tblLookup VALUES (1684777152)
  32. INSERT INTO @tblLookup VALUES (4251122042)
  33. INSERT INTO @tblLookup VALUES (2321926636)
  34. INSERT INTO @tblLookup VALUES (335633487)
  35. INSERT INTO @tblLookup VALUES (1661365465)
  36. INSERT INTO @tblLookup VALUES (4195302755)
  37. INSERT INTO @tblLookup VALUES (2366115317)
  38. INSERT INTO @tblLookup VALUES (997073096)
  39. INSERT INTO @tblLookup VALUES (1281953886)
  40. INSERT INTO @tblLookup VALUES (3579855332)
  41. INSERT INTO @tblLookup VALUES (2724688242)
  42. INSERT INTO @tblLookup VALUES (1006888145)
  43. INSERT INTO @tblLookup VALUES (1258607687)
  44. INSERT INTO @tblLookup VALUES (3524101629)
  45. INSERT INTO @tblLookup VALUES (2768942443)
  46. INSERT INTO @tblLookup VALUES (901097722)
  47. INSERT INTO @tblLookup VALUES (1119000684)
  48. INSERT INTO @tblLookup VALUES (3686517206)
  49. INSERT INTO @tblLookup VALUES (2898065728)
  50. INSERT INTO @tblLookup VALUES (853044451)
  51. INSERT INTO @tblLookup VALUES (1172266101)
  52. INSERT INTO @tblLookup VALUES (3705015759)
  53. INSERT INTO @tblLookup VALUES (2882616665)
  54. INSERT INTO @tblLookup VALUES (651767980)
  55. INSERT INTO @tblLookup VALUES (1373503546)
  56. INSERT INTO @tblLookup VALUES (3369554304)
  57. INSERT INTO @tblLookup VALUES (3218104598)
  58. INSERT INTO @tblLookup VALUES (565507253)
  59. INSERT INTO @tblLookup VALUES (1454621731)
  60. INSERT INTO @tblLookup VALUES (3485111705)
  61. INSERT INTO @tblLookup VALUES (3099436303)
  62. INSERT INTO @tblLookup VALUES (671266974)
  63. INSERT INTO @tblLookup VALUES (1594198024)
  64. INSERT INTO @tblLookup VALUES (3322730930)
  65. INSERT INTO @tblLookup VALUES (2970347812)
  66. INSERT INTO @tblLookup VALUES (795835527)
  67. INSERT INTO @tblLookup VALUES (1483230225)
  68. INSERT INTO @tblLookup VALUES (3244367275)
  69. INSERT INTO @tblLookup VALUES (3060149565)
  70. INSERT INTO @tblLookup VALUES (1994146192)
  71. INSERT INTO @tblLookup VALUES (31158534)
  72. INSERT INTO @tblLookup VALUES (2563907772)
  73. INSERT INTO @tblLookup VALUES (4023717930)
  74. INSERT INTO @tblLookup VALUES (1907459465)
  75. INSERT INTO @tblLookup VALUES (112637215)
  76. INSERT INTO @tblLookup VALUES (2680153253)
  77. INSERT INTO @tblLookup VALUES (3904427059)
  78. INSERT INTO @tblLookup VALUES (2013776290)
  79. INSERT INTO @tblLookup VALUES (251722036)
  80. INSERT INTO @tblLookup VALUES (2517215374)
  81. INSERT INTO @tblLookup VALUES (3775830040)
  82. INSERT INTO @tblLookup VALUES (2137656763)
  83. INSERT INTO @tblLookup VALUES (141376813)
  84. INSERT INTO @tblLookup VALUES (2439277719)
  85. INSERT INTO @tblLookup VALUES (3865271297)
  86. INSERT INTO @tblLookup VALUES (1802195444)
  87. INSERT INTO @tblLookup VALUES (476864866)
  88. INSERT INTO @tblLookup VALUES (2238001368)
  89. INSERT INTO @tblLookup VALUES (4066508878)
  90. INSERT INTO @tblLookup VALUES (1812370925)
  91. INSERT INTO @tblLookup VALUES (453092731)
  92. INSERT INTO @tblLookup VALUES (2181625025)
  93. INSERT INTO @tblLookup VALUES (4111451223)
  94. INSERT INTO @tblLookup VALUES (1706088902)
  95. INSERT INTO @tblLookup VALUES (314042704)
  96. INSERT INTO @tblLookup VALUES (2344532202)
  97. INSERT INTO @tblLookup VALUES (4240017532)
  98. INSERT INTO @tblLookup VALUES (1658658271)
  99. INSERT INTO @tblLookup VALUES (366619977)
  100. INSERT INTO @tblLookup VALUES (2362670323)
  101. INSERT INTO @tblLookup VALUES (4224994405)
  102. INSERT INTO @tblLookup VALUES (1303535960)
  103. INSERT INTO @tblLookup VALUES (984961486)
  104. INSERT INTO @tblLookup VALUES (2747007092)
  105. INSERT INTO @tblLookup VALUES (3569037538)
  106. INSERT INTO @tblLookup VALUES (1256170817)
  107. INSERT INTO @tblLookup VALUES (1037604311)
  108. INSERT INTO @tblLookup VALUES (2765210733)
  109. INSERT INTO @tblLookup VALUES (3554079995)
  110. INSERT INTO @tblLookup VALUES (1131014506)
  111. INSERT INTO @tblLookup VALUES (879679996)
  112. INSERT INTO @tblLookup VALUES (2909243462)
  113. INSERT INTO @tblLookup VALUES (3663771856)
  114. INSERT INTO @tblLookup VALUES (1141124467)
  115. INSERT INTO @tblLookup VALUES (855842277)
  116. INSERT INTO @tblLookup VALUES (2852801631)
  117. INSERT INTO @tblLookup VALUES (3708648649)
  118. INSERT INTO @tblLookup VALUES (1342533948)
  119. INSERT INTO @tblLookup VALUES (654459306)
  120. INSERT INTO @tblLookup VALUES (3188396048)
  121. INSERT INTO @tblLookup VALUES (3373015174)
  122. INSERT INTO @tblLookup VALUES (1466479909)
  123. INSERT INTO @tblLookup VALUES (544179635)
  124. INSERT INTO @tblLookup VALUES (3110523913)
  125. INSERT INTO @tblLookup VALUES (3462522015)
  126. INSERT INTO @tblLookup VALUES (1591671054)
  127. INSERT INTO @tblLookup VALUES (702138776)
  128. INSERT INTO @tblLookup VALUES (2966460450)
  129. INSERT INTO @tblLookup VALUES (3352799412)
  130. INSERT INTO @tblLookup VALUES (1504918807)
  131. INSERT INTO @tblLookup VALUES (783551873)
  132. INSERT INTO @tblLookup VALUES (3082640443)
  133. INSERT INTO @tblLookup VALUES (3233442989)
  134. INSERT INTO @tblLookup VALUES (3988292384)
  135. INSERT INTO @tblLookup VALUES (2596254646)
  136. INSERT INTO @tblLookup VALUES (62317068)
  137. INSERT INTO @tblLookup VALUES (1957810842)
  138. INSERT INTO @tblLookup VALUES (3939845945)
  139. INSERT INTO @tblLookup VALUES (2647816111)
  140. INSERT INTO @tblLookup VALUES (81470997)
  141. INSERT INTO @tblLookup VALUES (1943803523)
  142. INSERT INTO @tblLookup VALUES (3814918930)
  143. INSERT INTO @tblLookup VALUES (2489596804)
  144. INSERT INTO @tblLookup VALUES (225274430)
  145. INSERT INTO @tblLookup VALUES (2053790376)
  146. INSERT INTO @tblLookup VALUES (3826175755)
  147. INSERT INTO @tblLookup VALUES (2466906013)
  148. INSERT INTO @tblLookup VALUES (167816743)
  149. INSERT INTO @tblLookup VALUES (2097651377)
  150. INSERT INTO @tblLookup VALUES (4027552580)
  151. INSERT INTO @tblLookup VALUES (2265490386)
  152. INSERT INTO @tblLookup VALUES (503444072)
  153. INSERT INTO @tblLookup VALUES (1762050814)
  154. INSERT INTO @tblLookup VALUES (4150417245)
  155. INSERT INTO @tblLookup VALUES (2154129355)
  156. INSERT INTO @tblLookup VALUES (426522225)
  157. INSERT INTO @tblLookup VALUES (1852507879)
  158. INSERT INTO @tblLookup VALUES (4275313526)
  159. INSERT INTO @tblLookup VALUES (2312317920)
  160. INSERT INTO @tblLookup VALUES (282753626)
  161. INSERT INTO @tblLookup VALUES (1742555852)
  162. INSERT INTO @tblLookup VALUES (4189708143)
  163. INSERT INTO @tblLookup VALUES (2394877945)
  164. INSERT INTO @tblLookup VALUES (397917763)
  165. INSERT INTO @tblLookup VALUES (1622183637)
  166. INSERT INTO @tblLookup VALUES (3604390888)
  167. INSERT INTO @tblLookup VALUES (2714866558)
  168. INSERT INTO @tblLookup VALUES (953729732)
  169. INSERT INTO @tblLookup VALUES (1340076626)
  170. INSERT INTO @tblLookup VALUES (3518719985)
  171. INSERT INTO @tblLookup VALUES (2797360999)
  172. INSERT INTO @tblLookup VALUES (1068828381)
  173. INSERT INTO @tblLookup VALUES (1219638859)
  174. INSERT INTO @tblLookup VALUES (3624741850)
  175. INSERT INTO @tblLookup VALUES (2936675148)
  176. INSERT INTO @tblLookup VALUES (906185462)
  177. INSERT INTO @tblLookup VALUES (1090812512)
  178. INSERT INTO @tblLookup VALUES (3747672003)
  179. INSERT INTO @tblLookup VALUES (2825379669)
  180. INSERT INTO @tblLookup VALUES (829329135)
  181. INSERT INTO @tblLookup VALUES (1181335161)
  182. INSERT INTO @tblLookup VALUES (3412177804)
  183. INSERT INTO @tblLookup VALUES (3160834842)
  184. INSERT INTO @tblLookup VALUES (628085408)
  185. INSERT INTO @tblLookup VALUES (1382605366)
  186. INSERT INTO @tblLookup VALUES (3423369109)
  187. INSERT INTO @tblLookup VALUES (3138078467)
  188. INSERT INTO @tblLookup VALUES (570562233)
  189. INSERT INTO @tblLookup VALUES (1426400815)
  190. INSERT INTO @tblLookup VALUES (3317316542)
  191. INSERT INTO @tblLookup VALUES (2998733608)
  192. INSERT INTO @tblLookup VALUES (733239954)
  193. INSERT INTO @tblLookup VALUES (1555261956)
  194. INSERT INTO @tblLookup VALUES (3268935591)
  195. INSERT INTO @tblLookup VALUES (3050360625)
  196. INSERT INTO @tblLookup VALUES (752459403)
  197. INSERT INTO @tblLookup VALUES (1541320221)
  198. INSERT INTO @tblLookup VALUES (2607071920)
  199. INSERT INTO @tblLookup VALUES (3965973030)
  200. INSERT INTO @tblLookup VALUES (1969922972)
  201. INSERT INTO @tblLookup VALUES (40735498)
  202. INSERT INTO @tblLookup VALUES (2617837225)
  203. INSERT INTO @tblLookup VALUES (3943577151)
  204. INSERT INTO @tblLookup VALUES (1913087877)
  205. INSERT INTO @tblLookup VALUES (83908371)
  206. INSERT INTO @tblLookup VALUES (2512341634)
  207. INSERT INTO @tblLookup VALUES (3803740692)
  208. INSERT INTO @tblLookup VALUES (2075208622)
  209. INSERT INTO @tblLookup VALUES (213261112)
  210. INSERT INTO @tblLookup VALUES (2463272603)
  211. INSERT INTO @tblLookup VALUES (3855990285)
  212. INSERT INTO @tblLookup VALUES (2094854071)
  213. INSERT INTO @tblLookup VALUES (198958881)
  214. INSERT INTO @tblLookup VALUES (2262029012)
  215. INSERT INTO @tblLookup VALUES (4057260610)
  216. INSERT INTO @tblLookup VALUES (1759359992)
  217. INSERT INTO @tblLookup VALUES (534414190)
  218. INSERT INTO @tblLookup VALUES (2176718541)
  219. INSERT INTO @tblLookup VALUES (4139329115)
  220. INSERT INTO @tblLookup VALUES (1873836001)
  221. INSERT INTO @tblLookup VALUES (414664567)
  222. INSERT INTO @tblLookup VALUES (2282248934)
  223. INSERT INTO @tblLookup VALUES (4279200368)
  224. INSERT INTO @tblLookup VALUES (1711684554)
  225. INSERT INTO @tblLookup VALUES (285281116)
  226. INSERT INTO @tblLookup VALUES (2405801727)
  227. INSERT INTO @tblLookup VALUES (4167216745)
  228. INSERT INTO @tblLookup VALUES (1634467795)
  229. INSERT INTO @tblLookup VALUES (376229701)
  230. INSERT INTO @tblLookup VALUES (2685067896)
  231. INSERT INTO @tblLookup VALUES (3608007406)
  232. INSERT INTO @tblLookup VALUES (1308918612)
  233. INSERT INTO @tblLookup VALUES (956543938)
  234. INSERT INTO @tblLookup VALUES (2808555105)
  235. INSERT INTO @tblLookup VALUES (3495958263)
  236. INSERT INTO @tblLookup VALUES (1231636301)
  237. INSERT INTO @tblLookup VALUES (1047427035)
  238. INSERT INTO @tblLookup VALUES (2932959818)
  239. INSERT INTO @tblLookup VALUES (3654703836)
  240. INSERT INTO @tblLookup VALUES (1088359270)
  241. INSERT INTO @tblLookup VALUES (936918000)
  242. INSERT INTO @tblLookup VALUES (2847714899)
  243. INSERT INTO @tblLookup VALUES (3736837829)
  244. INSERT INTO @tblLookup VALUES (1202900863)
  245. INSERT INTO @tblLookup VALUES (817233897)
  246. INSERT INTO @tblLookup VALUES (3183342108)
  247. INSERT INTO @tblLookup VALUES (3401237130)
  248. INSERT INTO @tblLookup VALUES (1404277552)
  249. INSERT INTO @tblLookup VALUES (615818150)
  250. INSERT INTO @tblLookup VALUES (3134207493)
  251. INSERT INTO @tblLookup VALUES (3453421203)
  252. INSERT INTO @tblLookup VALUES (1423857449)
  253. INSERT INTO @tblLookup VALUES (601450431)
  254. INSERT INTO @tblLookup VALUES (3009837614)
  255. INSERT INTO @tblLookup VALUES (3294710456)
  256. INSERT INTO @tblLookup VALUES (1567103746)
  257. INSERT INTO @tblLookup VALUES (711928724)
  258. INSERT INTO @tblLookup VALUES (3020668471)
  259. INSERT INTO @tblLookup VALUES (3272380065)
  260. INSERT INTO @tblLookup VALUES (1510334235)
  261. INSERT INTO @tblLookup VALUES (755167117)
  262.  
  263. DECLARE @crc BIGINT, @len INT, @i INT, @index INT
  264. DECLARE @tblval BIGINT
  265. SET @crc = 0xFFFFFFFF
  266. SET @len = LEN(@input)
  267. SET @i = 1
  268.  
  269. WHILE @i <= @len
  270. BEGIN
  271. SET @index = ((@crc & 0xff) ^ ASCII(SUBSTRING(@input, @i, 1)))
  272. SET @tblval = (SELECT Value FROM @tblLookup WHERE ID = @Index)
  273. SET @crc = (@crc / 256) ^ @tblval
  274. SET @i = @i + 1
  275. END
  276. SET @crc = ~@crc
  277.  
  278. SELECT @crc as CRC32, CONVERT(VARBINARY(4), @crc) as CRC32Hex
  279.  
  280. Declare @input as varchar(1000)
  281. Set @input='This is the CRC test'
  282. Declare @CRCtable as varchar(3000)
  283. Declare @Index as int
  284. Declare @crc as BIGINT
  285. Declare @length as INT
  286. Declare @i as INT
  287. Declare @tblval as BIGINT
  288. Declare @CTindex as int
  289. Declare @ans as varchar(25)
  290.  
  291. Set @CRCtable='0000000000, 1996959894, 3993919788, 2567524794, 0124634137, 1886057615, 3915621685, 2657392035, 0249268274, 2044508324, 3772115230, 2547177864, 0162941995, 2125561021, 3887607047, 2428444049, 0498536548, 1789927666, 4089016648, 2227061214, 0450548861, 1843258603, 4107580753, 2211677639, 0325883990, 1684777152, 4251122042, 2321926636, 0335633487, 1661365465, 4195302755, 2366115317, 0997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 0901097722, 1119000684, 3686517206, 2898065728, 0853044451, 1172266101, 3705015759, 2882616665, 0651767980, 1373503546, 3369554304, 3218104598, 0565507253, 1454621731, 3485111705, 3099436303, 0671266974, 1594198024, 3322730930, 2970347812, 0795835527, 1483230225, 3244367275, 3060149565, 1994146192, 0031158534, 2563907772, 4023717930, 1907459465, 0112637215, 2680153253, 3904427059, 2013776290, 0251722036, 2517215374, 3775830040, 2137656763, 0141376813, 2439277719, 3865271297, 1802195444, 0476864866, 2238001368, 4066508878, 1812370925, 0453092731, 2181625025, 4111451223, 1706088902, 0314042704, 2344532202, 4240017532, 1658658271, 0366619977, 2362670323, 4224994405, 1303535960, 0984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 0879679996, 2909243462, 3663771856, 1141124467, 0855842277, 2852801631, 3708648649, 1342533948, 0654459306, 3188396048, 3373015174, 1466479909, 0544179635, 3110523913, 3462522015, 1591671054, 0702138776, 2966460450, 3352799412, 1504918807, 0783551873, 3082640443, 3233442989, 3988292384, 2596254646, 0062317068, 1957810842, 3939845945, 2647816111, 0081470997, 1943803523, 3814918930, 2489596804, 0225274430, 2053790376, 3826175755, 2466906013, 0167816743, 2097651377, 4027552580, 2265490386, 0503444072, 1762050814, 4150417245, 2154129355, 0426522225, 1852507879, 4275313526, 2312317920, 0282753626, 1742555852, 4189708143, 2394877945, 0397917763, 1622183637, 3604390888, 2714866558, 0953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 0906185462, 1090812512, 3747672003, 2825379669, 0829329135, 1181335161, 3412177804, 3160834842, 0628085408, 1382605366, 3423369109, 3138078467, 0570562233, 1426400815, 3317316542, 2998733608, 0733239954, 1555261956, 3268935591, 3050360625, 0752459403, 1541320221, 2607071920, 3965973030, 1969922972, 0040735498, 2617837225, 3943577151, 1913087877, 0083908371, 2512341634, 3803740692, 2075208622, 0213261112, 2463272603, 3855990285, 2094854071, 0198958881, 2262029012, 4057260610, 1759359992, 0534414190, 2176718541, 4139329115, 1873836001, 0414664567, 2282248934, 4279200368, 1711684554, 0285281116, 2405801727, 4167216745, 1634467795, 0376229701, 2685067896, 3608007406, 1308918612, 0956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 0936918000, 2847714899, 3736837829, 1202900863, 0817233897, 3183342108, 3401237130, 1404277552, 0615818150, 3134207493, 3453421203, 1423857449, 0601450431, 3009837614, 3294710456, 1567103746, 0711928724, 3020668471, 3272380065, 1510334235, 0755167117, '
  292. Set @crc = 0xFFFFFFFF
  293. Set @length = LEN(@input)
  294. Set @i = 1
  295.  
  296. While @i <= @length
  297. Begin
  298. Set @index = ((@crc & 0xff) ^ ASCII(SUBSTRING(@input, @i, 1)))
  299. Set @CTindex = (@index * 12) + 1
  300. Set @ans=substring(@CRCtable,@CTindex,10 )
  301. Set @tblval = convert(bigint,@ans)
  302. Set @crc = (@crc / 256) ^ @tblval
  303. Set @i = @i + 1
  304. End
  305. Set @crc = ~@crc
  306.  
  307. SELECT @crc as CRC32, CONVERT(VARBINARY(4), @crc) as CRC32Hex
Add Comment
Please, Sign In to add comment