me.spar.co.za
Open in
urlscan Pro
41.79.77.152
Public Scan
URL:
https://me.spar.co.za/
Submission: On January 30 via api from ZA — Scanned from DE
Submission: On January 30 via api from ZA — Scanned from DE
Form analysis
7 forms found in the DOMName: signin —
<form name="signin" novalidate="" ng-show="mode === modes.signin" class="ng-pristine ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
<div class="form-item auth-heading"> <img src="/images/SPAR_logo_1.jpeg" alt="SPAR Logo" ng-show="LogoUrl">
<p ng-show="LogoSubTitle" class="logo-subtitle ng-binding ng-hide"></p>
<p id="instruction" ng-bind-html="CallToActionText" class="ng-binding">Sign in or register for SPAR Rewards and more!</p>
</div>
<div class="form-item"> <label for="mnum">Mobile Number</label>
<div ng-show="loginMobileRequired || (signin.mnum.hasVisited && signin.mnum.$invalid)" class="error ng-hide"> <span>Please enter a valid mobile number <span ng-show="isCountryZA" class="ng-binding">(e.g. 0821234567)</span></span> </div>
<input type="tel" id="mnum" name="mnum" ng-model="user.mobile" required="" ng-pattern="/^\+?[\d]{8,15}$/i" minlength="8" maxlength="15" placeholder="Example: 0821234567" validate-on-blur="" focus-on="mobile-number-signin"
ng-blur="isMobileNumberValid()" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
</div>
<div class="form-item" ng-show="mode === modes.signin">
<div class="recaptcha-wrap ng-isolate-scope" recaptcha-id="" id="LogInWithOPTRecaptcha" settings="settings" response="response">
<div id="recaptureTarget2" class="g-recaptcha">
<div style="width: 304px; height: 78px;">
<div><iframe title="reCAPTCHA" width="304" height="78" role="presentation" name="a-v0g33wt8zpz5" frameborder="0" scrolling="no"
sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
src="https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LcG1MUUAAAAAEyocr_U5NVFTSBtJMi1eqqWe1BX&co=aHR0cHM6Ly9tZS5zcGFyLmNvLnphOjQ0Mw..&hl=de&v=QUpyTKFkX5CIV6EF8TFSWEif&size=normal&cb=21vhrq3i6ufs"></iframe>
</div><textarea id="g-recaptcha-response-1" name="g-recaptcha-response" class="g-recaptcha-response"
style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
</div>
</div>
<div id="googleScript3">
<script src="https://www.google.com/recaptcha/api.js?onload=recaptureCallback10&render=explicit" id="googleScript1"></script>
</div>
</div>
</div>
<div class="form-item"> <label class="remember-me custom-checkbox"> Remember Me <input type="checkbox" name="" value="" ng-model="user.rememberMe" class="ng-pristine ng-untouched ng-valid ng-not-empty"> <span class="checkmark"></span> </label>
</div>
<div class="form-item center">
<div ng-show="mode === modes.signin"> <!-- ngIf: responseStatus --> </div> <button id="btnLogin" class="btn btn-primary submit" ng-click="submitSignInForm()" ng-class="{'loading' : loading}"> Log in </button>
<div id="no-link-spacer"></div> <button class="btn btn-secondary" ng-click="goToRegistration()"> Register </button>
</div>
</form>
Name: completeProfile —
<form name="completeProfile" novalidate="" ng-show="mode == modes.completeprofile" class="ng-pristine ng-invalid ng-invalid-required ng-valid-email ng-hide ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
<div class="form-item auth-heading">
<h1>My SPAR</h1>
<p>Please complete your profile to continue</p>
</div>
<div class="form-item">
<div class="row">
<div class="col-sm-6 col-name"> <label for="firstName">First Name*</label>
<div ng-show="completeProfile.firstName.hasVisited && (completeProfile.firstName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
<div class="spacer ng-hide" ng-show="completeProfile.lastName.hasVisited && (completeProfile.lastName.$invalid)"> </div> <input type="text" name="firstName" ng-model="user.firstName" required="" validate-on-blur=""
class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
</div>
<div class="col-sm-6 col-name"> <label for="lastName">Surname*</label>
<div ng-show="completeProfile.lastName.hasVisited && (completeProfile.lastName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
<div class="spacer ng-hide" ng-show="completeProfile.firstName.hasVisited && (completeProfile.firstName.$invalid)"> </div> <input type="text" name="lastName" ng-model="user.lastName" validate-on-blur="" required=""
class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
</div>
</div>
</div>
<div class="form-item"> <label for="IDType">Identification Type*</label>
<div ng-show="completeProfile.IDType.$invalid && completeProfile.IDType.hasVisited" class="error ng-hide"> <span ng-show="completeProfile.IDType.$error.required" class="ng-hide">Identification Type is required.</span> </div> <select
name="IDType" id="IDType" ng-model="user.IDType" ng-change="resetDateOfBirth()" class="ng-pristine ng-untouched ng-valid ng-not-empty">
<option value="IDNumber" selected="selected">ID Number</option>
<option value="Passport" ng-disabled="user.IDNumber">Passport</option>
</select>
</div> <!-- ngIf: user.IDType === 'IDNumber' -->
<div class="form-item ng-scope" ng-if="user.IDType === 'IDNumber'"> <label for="IDNumber">ID Number*</label>
<div ng-show="completeProfile.IDNumber.$invalid && completeProfile.IDNumber.hasVisited" class="error ng-hide"> <span>Valid ID number required</span> </div> <input type="text" name="IDNumber" ng-model="user.IDNumber" required=""
ng-pattern="^\+?[\d]{13}$" minlength="13" maxlength="13" validate-on-blur="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
</div><!-- end ngIf: user.IDType === 'IDNumber' --> <!-- ngIf: user.IDType === 'Passport' --> <!-- ngIf: DateOfBirthRequired || user.IDType === 'Passport' -->
<div class="form-item"> <label>Email Address</label>
<div ng-show="completeProfile.Email.hasVisited && completeProfile.Email.$invalid" class="error ng-hide"> <span>Please enter a valid email address.</span> </div> <input name="Email" type="email"
class="email ng-pristine ng-untouched ng-valid ng-empty ng-valid-email" ng-model="user.email" validate-on-blur="">
</div>
<div class="form-item">
<div class="recaptcha-wrap ng-isolate-scope" recaptcha-id="" id="completeEmailRecaptcha" settings="settings" response="response">
<div id="recaptureTarget5" class="g-recaptcha">
<div style="width: 304px; height: 78px;">
<div><iframe title="reCAPTCHA" width="304" height="78" role="presentation" name="a-3t8x2zhzmz5u" frameborder="0" scrolling="no"
sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
src="https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LcG1MUUAAAAAEyocr_U5NVFTSBtJMi1eqqWe1BX&co=aHR0cHM6Ly9tZS5zcGFyLmNvLnphOjQ0Mw..&hl=de&v=QUpyTKFkX5CIV6EF8TFSWEif&size=normal&cb=wrryrnjm04vy"></iframe>
</div><textarea id="g-recaptcha-response-2" name="g-recaptcha-response" class="g-recaptcha-response"
style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
</div><iframe style="display: none;"></iframe>
</div>
<div id="googleScript6">
<script src="https://www.google.com/recaptcha/api.js?onload=recaptureCallback11&render=explicit" id="googleScript4"></script>
</div>
</div>
</div>
<div class="form-item"> <!-- ngIf: responseStatus --> <button id="btnCompleteEmail" class="btn btn-primary" ng-click="captureMissingProfile()" ng-class="{'loading' : loading}"> Continue </button> </div>
</form>
Name: completeCardInformation —
<form name="completeCardInformation" novalidate="" ng-show="mode == modes.cardChoice" class="ng-pristine ng-valid ng-hide">
<div class="form-item auth-heading">
<h1>SPAR Rewards Card</h1>
<p>Please link your new SPAR Rewards card</p>
</div>
<div class="form-item rewards-card-step"> <button id="btnShowLinkCard" class="btn btn-primary" ng-click="showLinkCard()" ng-class="{'loading' : loading}"> Link Card </button> <!-- TODO: REMOVE CANCEL BUTTON WHEN THE V2 CARDS ARE LIVE-->
<button id="btnCancel" class="btn btn-default" ng-click="goToHome()"> Cancel </button> </div>
</form>
Name: updatecardinfo —
<form name="updatecardinfo" novalidate="" ng-show="mode == modes.updatecardinfo" class="ng-pristine ng-valid ng-hide">
<div class="form-item auth-heading">
<h1>SPAR Rewards Card</h1>
<p>Get your new SPAR Rewards card in-store today, for more Savings, more Rewards, more for You. <br><br>Do you want to link your profile to your new SPAR Rewards card?</p>
</div>
<div class="form-item rewards-card-step"> <button id="btnOk" class="btn btn-primary" ng-click="goToCardLink()"> Yes </button> <button id="btnNo" class="btn btn-default" ng-click="goToHome()"> No </button> </div>
</form>
Name: completeCardInformation —
<form name="completeCardInformation" novalidate="" ng-show="mode == modes.completecardinfo" class="ng-pristine ng-invalid ng-invalid-required ng-hide">
<div class="form-item auth-heading">
<h1>SPAR Rewards Card</h1>
<p>Turn your SPAR Rewards card over and you should see your card number just below the barcode. It should start with 88.</p>
</div>
<div class="form-item"> <label>Your SPAR Rewards Card Number</label> <input name="CardNumber" type="text" class="text ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" ng-model="user.cardNumber" required="" validate-on-blur="">
</div>
<div class="form-item"> <!-- ngIf: responseStatus --> <button id="btnLinkCard" class="btn btn-primary" ng-click="linkCard()" ng-class="{'loading' : loading}"> Link Card </button> </div>
</form>
Name: register —
<form name="register" novalidate="" ng-show="mode == modes.register" class="ng-pristine ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid-email ng-hide">
<div class="form-item auth-heading">
<h1>Sign Up</h1>
<p id="regInstruction">It's Quick and Easy</p>
</div>
<div class="form-item"> <label for="regmnum">Mobile Number*</label>
<div ng-show="register.mnum.hasVisited && (RegisterMobileError || register.mnum.$invalid)" class="error ng-hide"> <span>Please enter a valid mobile number <span ng-show="isCountryZA" class="ng-binding">(e.g. 0821234567)</span></span>
</div> <input type="tel" id="regmnum" name="mnum" ng-model="user.mobile" required="" ng-pattern="/^\+?[\d]{8,15}$/i" minlength="8" maxlength="15" placeholder="Example: 0821234567" focus-on="enter-mobile" validate-on-blur=""
ng-blur="isMobileNumberValid()" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
</div>
<div class="form-item">
<div class="row">
<div class="col-sm-6 col-name"> <label for="firstName">First Name*</label>
<div ng-show="register.firstName.hasVisited && (register.firstName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
<div class="spacer ng-hide" ng-show="register.lastName.hasVisited && (register.lastName.$invalid)"> </div> <input type="text" id="firstName" name="firstName" ng-model="user.firstName" required="" validate-on-blur=""
class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
</div>
<div class="col-sm-6 col-name"> <label for="lastName">Surname*</label>
<div ng-show="register.lastName.hasVisited && (register.lastName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
<div class="spacer ng-hide" ng-show="register.firstName.hasVisited && (register.firstName.$invalid)"> </div> <input type="text" id="lastName" name="lastName" ng-model="user.lastName" validate-on-blur="" required=""
class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
</div>
</div>
</div> <!-- ID Number / Passport -->
<div class="form-item"> <label for="IDType">Identification Type*</label>
<div ng-show="register.IDType.$invalid && register.IDType.hasVisited" class="error ng-hide"> <span ng-show="register.IDType.$error.required" class="ng-hide">Identification Type is required.</span> </div> <select name="IDType"
ng-model="user.IDType" ng-change="resetDateOfBirth()" class="ng-pristine ng-untouched ng-valid ng-not-empty">
<option value="IDNumber" selected="selected">ID Number</option>
<option value="Passport">Passport</option>
</select>
</div> <!-- ngIf: user.IDType === 'IDNumber' -->
<div class="form-item ng-scope" ng-if="user.IDType === 'IDNumber'"> <label for="IDNumber">ID Number*</label>
<div ng-show="register.IDNumber.$invalid && register.IDNumber.hasVisited" class="error ng-hide"> <span>Valid ID number required</span> </div> <input type="text" id="IDNumber" name="IDNumber" ng-model="user.IDNumber" required=""
ng-pattern="^\+?[\d]{13}$" minlength="13" maxlength="13" validate-on-blur="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
</div><!-- end ngIf: user.IDType === 'IDNumber' --> <!-- ngIf: user.IDType === 'Passport' --> <!-- ngIf: DateOfBirthRequired || user.IDType === 'Passport' -->
<div class="form-item"> <label>Email Address</label>
<div ng-show="register.Email.hasVisited && register.Email.$invalid" class="error ng-hide"> <span>Please enter a valid email address.</span> </div> <input name="Email" type="email"
class="email ng-pristine ng-untouched ng-valid ng-empty ng-valid-email" ng-model="user.email" validate-on-blur="">
</div>
<div class="form-item popia-terms">
<ol ng-show="enablePOPIAChecks">
<li>The SPAR Group LTD, with its head offices located at 22 Chancery Lane, Pinetown is collecting this information to enable us to resolve your query and it will be used for this purpose only and disposed of thereafter, unless you consent to
the information being retained for marketing purposes. </li>
<li>This information is given to us by you voluntarily and of your own free will.</li>
<li>If you do not wish to provide us with this information, are unable to do so, or object to it being used, it may result in us being unable to assist you further. </li>
<li>To resolve your issue, and for that purpose only, we may share this information with third parties, unless you consent to it being shared for marketing purposes. </li>
<li>You have the right to access this information while in our possession and make corrections if necessary. </li>
<li>You also have the right to lodge a complaint via email with the office of the Information Regulator, at <a href="mailto:complaints.IR@justice.gov.za">complaints.IR@justice.gov.za</a>, if you are unhappy with the manner in which we deal with
your information. </li>
</ol> <!-- This one is required -->
<div> <label class="custom-checkbox"> <b>Do you agree to the <a href="javascript:void(0);" title="SPAR Terms and Conditions" ng-click="launchTermsLink()">Terms & Conditions</a> and therefore consent to us processing your information?</b>
<input type="checkbox" name="" value="" ng-model="user.popiconsent" class="ng-pristine ng-untouched ng-valid ng-empty"> <span class="checkmark"></span> </label>
<div ng-show="showPOPIError && user.popiconsent == false" class="error ng-hide"> <span>Please agree to the terms above</span> </div>
</div>
<div> <label class="custom-checkbox"> You further consent to us retaining your details for the purposes of sending you information about new specials, rewards and other news which may be relevant to you. You can opt out any time in the future.
<input id="" type="checkbox" name="" value="" ng-model="user.optedInToComms" class="ng-pristine ng-untouched ng-valid ng-not-empty"> <span class="checkmark"></span> </label> </div>
</div>
<div class="form-item">
<div class="recaptcha-wrap ng-isolate-scope" recaptcha-id="" id="registerRecaptcha" settings="settings" response="response">
<div id="recaptureTarget8" class="g-recaptcha">
<div style="width: 304px; height: 78px;">
<div><iframe title="reCAPTCHA" width="304" height="78" role="presentation" name="a-7qtt66xt9t1i" frameborder="0" scrolling="no"
sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
src="https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LcG1MUUAAAAAEyocr_U5NVFTSBtJMi1eqqWe1BX&co=aHR0cHM6Ly9tZS5zcGFyLmNvLnphOjQ0Mw..&hl=de&v=QUpyTKFkX5CIV6EF8TFSWEif&size=normal&cb=j16ha0oh1yf"></iframe>
</div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response"
style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
</div>
</div>
<div id="googleScript9">
<script src="https://www.google.com/recaptcha/api.js?onload=recaptureCallback12&render=explicit" id="googleScript7"></script>
</div>
</div>
</div> <!-- ngIf: responseStatus -->
<div class="form-item">
<div ng-show="InvalidRegisterForm" class="error ng-hide"> <span>The form could not be submitted because it contains errors. Please review the form fields above for details.</span> </div> <button id="btnRegisterReq"
class="btn btn-secondary btn-full-width" ng-class="{'loading' : loading}" ng-click="requestRegistrationOTP(false)"> Register </button>
</div>
</form>
Name: registrationVerification —
<form name="registrationVerification" novalidate="" ng-show="mode == modes.verify" class="ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-valid-maxlength ng-hide">
<div class="form-item auth-heading">
<h1>Verify Account</h1>
<p>Please verify your account</p>
</div>
<div class="form-item">
<p class="ng-binding">We've sent a One Time PIN to to verify your account. Please enter the PIN below.</p>
</div>
<div class="form-item"> <label for="rotp">PIN</label>
<div ng-show="registrationVerification.otp.hasVisited && registrationVerification.otp.$invalid" class="error ng-hide"> <span ng-show="registrationVerification.otp.$error.required || VerifyAccountError" class="">Check your phone for your
One Time PIN</span> <span ng-show="registrationVerification.otp.$error.minlength || registrationVerification.otp.$error.maxlength" class="ng-hide">Invalid PIN (must be 6 characters)</span> </div> <input type="tel" id="rotp" name="otp"
ng-model="user.oneTimePin" required="" placeholder="Enter One Time PIN" inputmode="numeric" autocomplete="one-time-code" validate-on-blur="" minlength="6" maxlength="6" focus-on="enter-otp-register"
class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-minlength ng-valid-maxlength">
</div>
<div class="form-item"> <!-- ngIf: responseStatus --> <button id="btnVerifyAccount" class="btn btn-primary submit ng-hide" ng-class="{'loading' : loading}" ng-show="isRegistrationOTP()" ng-click="registerCustomer()"> Verify Account </button>
<button id="btnSignIn" class="btn btn-primary submit ng-hide" ng-class="{'loading' : loading}" ng-show="isLoginOTP()" ng-click="completeLogin()"> Login </button>
<a ng-click="requestResendOTP()" href="javascript:void(0);" class="text-link" ng-show="canResendOTP" id="lnkRegisterResendPin">Resend PIN</a>
<p class="text-center ng-binding">PINs expire within 15 minutes.</p>
</div>
</form>
Text Content
JAVASCRIPT DISABLED :( Sorry, JavaScript appears to be disabled in your browser. The SPAR Rewards application requires JavaScript enabled in order to work correctly. Please enable JavaScript in your browser settings and then refresh this page. COOKIES DISABLED :( Sorry, cookies appear to be disabled in your browser. The SPAR Rewards application requires cookies to be enabled in your browser. Please enable cookies in your browser settings and then refresh this page. Sign in or register for SPAR Rewards and more! Mobile Number Please enter a valid mobile number (e.g. 0821234567) Remember Me Log in Register MY SPAR Please complete your profile to continue First Name* Required Surname* Required Identification Type* Identification Type is required. ID Number Passport ID Number* Valid ID number required Email Address Please enter a valid email address. Continue SPAR REWARDS CARD Please link your new SPAR Rewards card Link Card Cancel SPAR REWARDS CARD Get your new SPAR Rewards card in-store today, for more Savings, more Rewards, more for You. Do you want to link your profile to your new SPAR Rewards card? Yes No SPAR REWARDS CARD Turn your SPAR Rewards card over and you should see your card number just below the barcode. It should start with 88. Your SPAR Rewards Card Number Link Card SIGN UP It's Quick and Easy Mobile Number* Please enter a valid mobile number (e.g. 0821234567) First Name* Required Surname* Required Identification Type* Identification Type is required. ID Number Passport ID Number* Valid ID number required Email Address Please enter a valid email address. 1. The SPAR Group LTD, with its head offices located at 22 Chancery Lane, Pinetown is collecting this information to enable us to resolve your query and it will be used for this purpose only and disposed of thereafter, unless you consent to the information being retained for marketing purposes. 2. This information is given to us by you voluntarily and of your own free will. 3. If you do not wish to provide us with this information, are unable to do so, or object to it being used, it may result in us being unable to assist you further. 4. To resolve your issue, and for that purpose only, we may share this information with third parties, unless you consent to it being shared for marketing purposes. 5. You have the right to access this information while in our possession and make corrections if necessary. 6. You also have the right to lodge a complaint via email with the office of the Information Regulator, at complaints.IR@justice.gov.za, if you are unhappy with the manner in which we deal with your information. Do you agree to the Terms & Conditions and therefore consent to us processing your information? Please agree to the terms above You further consent to us retaining your details for the purposes of sending you information about new specials, rewards and other news which may be relevant to you. You can opt out any time in the future. The form could not be submitted because it contains errors. Please review the form fields above for details. Register VERIFY ACCOUNT Please verify your account We've sent a One Time PIN to to verify your account. Please enter the PIN below. PIN Check your phone for your One Time PIN Invalid PIN (must be 6 characters) Verify Account Login Resend PIN PINs expire within 15 minutes. Terms and Conditions x PLEASE VERIFY YOUR AGE Please indicate whether you are over 18 You need to be at least 18 years old to use SPAR Rewards Required Required Required Year20062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195019491948194719461945194419431942194119401939193819371936193519341933193219311930192919281927192619251924 Month Day Sign up for TOPS Rewards Cancel Terms and Conditions UNDERAGE It seems that you are not old enough to be a TOPS customer. Please try again when you're 18 years old. Close AN ERROR OCCURRED An error occurred when trying to register for TOPS. Please refresh and try again. Close WE CARE ABOUT YOUR PRIVACY SPAR uses cookies to improve your experience on our website. By continuing to browse, you agree to the use of cookies on our website. To find out more, see SPAR's cookie policy.